只读变量
c++语言中只有字面量初始化的const常量才能进入符号表中。
当出现编译时不能确定const常量的时,const常量不能进入符号表中。而只是作为一个只读变量(当然,这个变量不能作为左值使用)。如下两种即为不确定情况:
1.用其它变量初始化const常量
2.被volatile修饰的const常量
举例1.
char a = 'x';
const char& b1 = a; //这里定义一个const引用b1
const int& b2 = a; //这里定义一个const引用b2,注意这里会默认将char型a转换为int型
a = 'y'; //这里修改后, a b1均为'y',但是b2仍为'x'。
//因为当类型不同,需要类型转换时,会生成一个新的只读变量。
//所以这里修改的只是a 和 b1引用,而b2这个只读变量没变。
举例2.
int a = 1;
const int b = a; //这里const常量b被其它变量a初始化,上面说了,这里b只是一个只读变量
int* p = const_cast<int*>(&b); //取消只读属性
*p = 5; //这里修改后a==1, b==*p==5
举例3.
volatile const int a = 1; //这里定义了volatile修饰的const常量a,上面说了,这里a只是一个只读变量
int* b = const_cast<int*>(&a); //这里强制转换取消只读属性
b = 5; //这里修改后, a b均为5