volatile
- 字面意思:可变的
- 确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
- 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
- 一个参数既可以是const还可以是volatile
- 使用场合
- 并行设备的硬件寄存器
- 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
- 多线程应用中被几个任务共享的变量
- 作用:禁止一个类的隐式拷贝
- 示例:
class Test1 { public: Test1(int n) { num=n; }//普通构造函数 private: int num; }; class Test2 { public: explicit Test2(int n) { num=n; }//explicit(显式)构造函数 private: int num; }; int main() { Test1 t1=12;//隐式调用其构造函数,成功 Test2 t2=12;//编译错误,不能隐式调用其构造函数 Test2 t2(12);//显式调用成功 return 0; }
- const expression 常量表达式
- constexpr int a = 20;
- 让编译器去验证a是否是产量,不是的话报错。
- 让编译器去验证a是否是产量,不是的话报错。
- constexpr int a = 20;
- 获得表达式的类型
int a; decltype(a) b; decltype(func(b)) c;
- 可以对自定义类型使用
class A{}; A a; decltype(A) a2;
- 和类型萃取的区别
- 类型萃取是一堆获取类型数据的接口
- 类型萃取是一堆获取类型数据的接口