C++中的const

以下程序输出是____。

#include <iostream> 
using namespace std; 
int main(void) 

    const int a = 10; 
    int * p = (int *)(&a); 
    *p = 20; 
    cout<<"a = "<<a<<", *p = "<<*p<<endl; 
    return 0; 

  • 编译阶段报错运行阶段报错

  • a = 10, *p = 10

  • a = 20, *p = 20

  • a = 10, *p = 20

  • a = 20, *p = 10

选D,a的值是改变了,和*p一样是20,但是编译器碰到a就直接替换成10了。


具体解释:

因为a   和p都指向相同的内存地址,所以输出的前两个结果是相同的,但为啥相同的内存里的结果不相同么?--这就是常量折叠.

这个"常量折叠"是  就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。

因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi  3.1415,用到pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!!!

简单的说就是,当编译器处理const的时候,编译器会将其变成一个立即数。  


你可能感兴趣的:(C++)