C++关键字
1、const
const就是一个常的修饰词,他可以修饰一个变量称为常变量,也可以修饰一个function成为一个常方法。
常变量:
这里记住const跟谁进就是修饰谁的,主要针对常指针变量,如下:
int const* a;//这个const修饰的是a,说明我们不能改变a指向的值,给a赋值,但是我们可以更改他的指向
int * const b;//这里const跟b近,那么他修饰的是b,b又是个指针,所以这里的b是个常指针,就是必须要出始化,因为这里的b指向是固定的,不能更改,我们只能更改他指向的值。
常方法:
常方法针对类成员函数来设定的,就是在某些case下我们只是为了获取一些数据,从而不希望这个方法更改成员变量设定的,让const修饰的方法无法修改成员变量。如:
class B{
public:
void Display(void)const;//这里的display无法修改成员a的值
private:
int a;
};
2、mutable
mutable是可以解除const限制下类的方法设定的,我们知道const修饰的变量我们可以用const_cast给他去常化,但是常方法就不行了。
那么mutable就是来解除const对常方法限制的。 起初我们为了对象方法对对象成员不进行修改,我们把这个方法设定成了const,但是如果我们想要通过常方法修改对象的部分成员体该怎么做呢?
那就是在定义这个成员的时候前面加上mutable这个关键字如下:
class Demo
{
public:
void add_internal_member(void)const;
int Display_member(void)const;
private:
int a;
mutable int b;
};
void Demo::add_internal_member(void)const
{
count << “=========%s:%d========” << __func__ << __LINE__<< endl;
//a++;// compiler will compile fail, and inform this function could not change defined variable by const.
b++;
count.flag(ios::dec);//set style of print as decimalism
}
void Demo::Display_member(void)const
{
count << “display member of this pointer as below:” << endl;
cout.flag(ios::dec);//set style of print as decimalism;
cout << “ a = ” << a << endl;
cout << “b = ” << b << endl;
}
int main(void)
{
Demo de;
de.add_internal_member();
de.display_member();
de.add_internal_member();
de.display_member();
return 0;
}
3、 volatile
关于volatile,这个很简单,就是为了保证一个变量时刻都能确保拿到对的值设定的,因为在多线程下有时候变量会被编译器忽略或者放到PC 寄存器里而不是内存中,这样有的线程从pc 寄存器里拿值,有的线程从内存中拿值,这样就产生了顺序错乱和错误了,volatile可以确保每次取变量值都是从内存中拿值,从而避免这种情况发生。
多线程我们一般访问共享变量为了保证顺序我们都是加锁保护来执行,volatile也可以达到这种效果提高效率。
4、register
5、auto
I.auto不能作为函数参数,否则无法通过编译;
II.auto不能推导非静态成员变量的类型,因为auto是在编译时期进行推导;
III.auto 不能用于声明数组,否则无法通过编译;
IV.auto不能作为模板参数(实例化时), 否则无法通过编译。
6、左值右值以及左值右值引用:
https://www.cnblogs.com/qicosmos/p/4283455.html