C++复习之(关键字与运算符)
1.指针与引用
指针是一个内存地址,本身就是一个变量,是可变的;引用是变量的别名,是不可变的,有点像一个指针常量。
2.define、typedef、inline
define是直接替换代码块,是预编译时候就进行的,不分配内存;
typedef是给类型、结构体取别名,有类型判断,在编译和运行时有作用;
inline是将内联函数编译完成的函数体直接插入到调用点,以省去程序运行中函数调用的问题,内联函数中不能包含复杂的结构体语句,例如while,for,递归等。
3.override和overload
override是用于继承时,重写父类方法,重写方法的参数列表、返回值、抛出异常要与被重写方法一致,重写方法权限不能为private,且重写后的权限只能更小,静态方法不能重写为非静态;
overload是重载方法。
4.new和malloc
两者都是内存申请关键字,他们最大区别是new申请内存是自动分配,malloc需要显示指定内存大小,因此new会调用对象的构造函数。
malloc是C/C++的标准库函数,new是C++的运算符,因此,new可以被重载,malloc不能
两者内存分配失败返回值会不一样,new会抛出异常,而malloc会返回Null
5.const和constexpr
const代表只读的变量,constexpr表达“常量语意”,后者的出现主要是解决前者双重语意的问题。
constexpr用于指明其后是一个常量(或者常量表达式),编译器在编译程序时可以顺带将其结果计算出来,而无需等到程序运行阶段,这样的优化极大地提高了程序的执行效率。
6.volatile
告诉编译器被声明变量随时可能变化,不需要编译器优化。
例如空循环
1 for(volatile int i=0; i<100000; i++); // 它会执⾏,不会被优化掉
7.extern
两个作用:表面变量或函数定义在其他文件中;让编译器以C语言命名规则查找函数(利于C++兼容C语言)
8.static
类外修饰变量或函数:变量都存放在静态存储区,局部变量作用域在函数内,全局变量作用域在文件内;被修饰的函数在文件外不可见
类内修饰变量或函数:需要类内声明,内外初始化,不同对象共享一个变量,可不是实例化调用;静态成员函数只能调用静态成员变量,且不能使用this指针,可不实例化调用。
9.std::atomic
用来解决线程安全
例如 a++指令在汇编指令中是分为三步的
1 2 3 | mov eax, dword ptr [a] # (1) inc eax # (2) mov dword ptr [a], eax # (3) |
当一个线程执行到第二步被另一个同样线程抢占cpu时间,会使得寄存器的值变得不安全,导致错误结果
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)