- const常量的判别准则
- 只有字面量或者常量初始化const修饰的变量才会进入符号表,成为常量
int main() { const int a = 2; //a 常量 const int b = a; //b 常量 int& c = const_cast<int&>(a); c = 5; int& d = const_cast<int&>(b); d = 6; printf("a = %d\n", a); printf("b = %d\n", b); printf("c = %d\n", c); printf("d = %d\n", d); return 0; }
- 使用变量初始化const修饰的变量只能成为只读变量。
int main() { int a = 2; //a 变量 const int b = a; //b 只读变量 int& c = const_cast<int&>(b); c = 5; printf("a = %d\n", a); printf("b = %d\n", b); printf("c = %d\n", c); return 0; }
- 被volatile和const修饰的变量就算使用字面量初始化也不能成为常量
int main() { volatile const int a = 2; //a 只读变量 int& b = const_cast<int&>(a); b = 5; printf("a = %d\n", a); printf("b = %d\n", b); return 0; }
- 被const修饰的引用类型的变量不可能成为常量
int main() { const int& a = 2; //a 只读变量 int& b = const_cast<int&>(a); b = 5; printf("a = %d\n", a); printf("b = %d\n", b); }
- 只有字面量或者常量初始化const修饰的变量才会进入符号表,成为常量
在编译期间不能直接确定初值的const修饰的标识符,只能成为只读变量