C++:编译器对被const修饰变量的处理行为(替换)
- 前言
- 原因
- 代码验证
前言
最近博主在写笔试时看到了一道有关被const修饰变量相关题,原题如下:
对于初学者来说,虽然a是常量,但可以通过指针p的行为来改变a所在空间中的值,所以因该是C,但答案确实D。
原因
上述分析是对的,常变量a可以通过指针p的行为来改变a所在空间中的内容,即a=20;但关键在于const修饰的变量还具有替换的作用,具体表现在编译器在编译程序时,如果看到对常量数据的读取,编译器会直接用常变量中的只来替换!!!
代码验证
以下代码基于VS编译器
【测试代码】:
int main()
{
const int a = 10;
int* p = (int*)&a;
*p = 20;
cout << "a=" << a << " " << "*p = " << *p << endl;
return 0;
}
【动画演示】: