C++11语法笔记

在这里插入图片描述

一.类中新增的默认成员函数:移动赋值和移动构造

在这里插入图片描述

二.lambda表达式

在这里插入图片描述

三.包装器

在这里插入图片描述

bind函数

在这里插入图片描述

四.C++类型转换规范

  • C语言中,相近类型之间可以发生隐式类型转换(比如doubleint),不相近有兼容性的类型之间可以进行显示强制类型转换(比如指针和整形类型)
  • C语言的类型转换可见性不强,容易引发程序的异常行为而且难以调式,因此C++对程序中的类型转换行为进行了规范–要求以函数调用的形式明确标明类型转换

C++ 四种类型转换

在这里插入图片描述

  • dynamic_cast常用于多态函数调用父类和子类对象的区分和识别,是专属于C++的特殊类型转换
  • 类型转换容易引发错误,应尽量避免

五.关键字volatile

  • volatile是一个类型修饰符(type specifier).它是被设计用来修饰被不同线程访问和修改的变量.volatile可以解释为直接存取原始内存地址
  • 有时编译器为了优化代码,会对一些变量的访问进行特殊编译优化(比如将变量值存入寄存器中,每次只从寄存器中读取该变量),关键字volatile可以禁止编译器对某个变量的访问进行特殊编译优化:
void Test()
{
    
    
	const int a = 2;
	//用const_cast类型转换强制修改变量
	int* p = const_cast<int*>(&a);
	*p = 3;
	cout << a << endl;
}
  • 上面的代码段在vs2022中变量a的输出结果为2,这是由于编译器会对 const变量的访问 进行优化(在有些环境下,编译器可能会将const变量的值放入寄存器中方便快速访问),关键字volatile可以让编译器从内存中正常读取a变量:
void Test()
{
    
    
	volatile const int a = 2;
	int* p = const_cast<int*>(&a);
	*p = 3;
	cout << a << endl;
}
  • 此时变量a的输出结果就是3了.
  • 当一个变量在程序中被频繁修改和读取时就应该用关键字volatile来修饰,常用场景:
    • 并行设备的硬件寄存器
    • 多线程环境下各线程间共享的标志,应该加volatile
    • 中断服务程序中供其它程序检测的变量,需要加volatile
      在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_73470348/article/details/132218029