C++:编译器对被const修饰变量的处理行为(替换)

C++:编译器对被const修饰变量的处理行为(替换)

  • 前言
  • 原因
  • 代码验证

前言

最近博主在写笔试时看到了一道有关被const修饰变量相关题,原题如下:
C++:编译器对被const修饰变量的处理行为(替换)_第1张图片
对于初学者来说,虽然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;
}

【动画演示】:
C++:编译器对被const修饰变量的处理行为(替换)_第2张图片

你可能感兴趣的:(C++经典收录,疑难杂症,c++,开发语言,学习,笔记)