1. mutable: 易变的,性情不定的
C++中const函数原本是不可改变非静态成员变量的值,但是有时想要改变该值时,可以将该成员变量声明为mutable
class Demo { public: Demo(){} ~Demo(){} public: bool getFlag() const { m_nAccess++; //如果m_nAccess不是mutable,这里就会出错 return m_bFlag; } private: mutable int m_nAccess; bool m_bFlag; };
2. volatile:易变的, 反复无常的, 易激动的
当两个线程都要用到某一个变量且该变量的值会被改变时,应该用volatile声明,因为一般的对象编译器可能会将其的拷贝放在寄存器中用以加快指令的执行速度,该关键字的作用是防止优化编译器把变量从内存装入CPU寄存器中。如果变量被装入寄存器,那么两个线程有可能一个使用内存中的变量,一个使用寄存器中的变量,这会造成程序的错误执行。 volatile的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值。
3. explicit:详述的, 明确的, 明晰的
explicit只能用语构造函数的声明,防止构造函数的自动转换
class MyClass { public:
MyClass( int num );
} ;
MyClass obj = 10; //ok,convert int to MyClass
相当于 MyClass temp(10); MyClass obj = temp;
如果是 explicit MyClass( int num );
MyClass obj = 10; //error,必须用MyClass obj(10);
4. auto
在c中,auto用于表示自动变量,表明变量的范围,auto变量在离开作用域是会变程序自动释放
for(int i=0;i<10;i++) //这里int i和auto int i等同
在C++中还可以根据auto的赋值来判断变量类型
如auto a =100; 等价于 int a = 100