随笔 - 9  文章 - 0  评论 - 0  阅读 - 659

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时间,会使得寄存器的值变得不安全,导致错误结果

 

  

 

 

 

 

 

 

  

  

posted on   俊男  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示