zoukankan      html  css  js  c++  java
  • const常量折叠

    首先来看一个例子:

    int main(int argc, char* argv[])
    {
    const int i=0;
    int *j = (int *) &i;
    *j=1;
    cout<<&i<<endlcout<<j<<endl;
    cout<<i<<endl;
    cout<<*j<<endl;
    return 0;
    }

    结果是

    0012ff7c
    0012ff7c

    0

    1

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

      这个"常量折叠"是就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。   
      我只是改了这个地址内容,但是 i 还是0,因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define PI 3.1415,用到PI时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!!!

     

  • 相关阅读:
    LOJ#551 Matrix
    洛谷P5163 WD与地图
    洛谷P4831 Scarlet loves WenHuaKe
    LOJ#6118 鬼牌
    支配树
    线性插值
    PropertiesConfiguration
    ThreadLocal
    Thread
    FastJson
  • 原文地址:https://www.cnblogs.com/wiessharling/p/4239308.html
Copyright © 2011-2022 走看看