常量折叠

来源:互联网 发布:python 时间差 分钟 编辑:程序博客网 时间:2024/05/17 03:46

#include <iostream> 

using namespace std; 

int main() 

const int i=5; 
int* p= (int*)&i; 
cout < <"p=" < <p < <endl; 
cout < <"&i=" < <&i < <endl; 

*p=100; 

  cout < <"*p=" < <*p < <endl; 
  cout < <"i=" < <i < <endl; 
  cout < <"p=" < <p < <endl; 
  cout < <"&i=" < <&i < <endl; 
  return 0; 


p=0012FF7C 
&i=0012FF7C 
*p=100 
i=5; 
p=0012FF7C 
&i=0012FF7C 

 

 

 

"常量折叠"是    就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。  
我只是改了这个地址内容,但是i还是0, 

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

 

int main(){ const int i=2; int* p=(int*)(&i); *p=100; cout<<"i的值为: "<<i<<endl; cout<<"指针指向的变量的值: "<<*p<<endl; cout<<"指针的值: "<<p<<endl; cout<<"i的地址: "<<&i<<endl; return 0;}


结果为: 

100 
0012FF7C 
0012FF7C 

 

int main(){ const int& i=2; //加了个引用 int* p=(int*)(&i); *p=100; cout<<"i的值为: "<<i<<endl; cout<<"指针指向的变量的值: "<<*p<<endl; cout<<"指针的值: "<<p<<endl; cout<<"i的地址: "<<&i<<endl; return 0;}


结果为: 
100 
100 
0012FF7C 
0012FF7C 

 

int main(){ int a=2; //加了这句 const int i=a; //用a赋值 int* p=(int*)(&i); *p=100; cout<<"i的值为: "<<i<<endl; cout<<"指针指向的变量的值: "<<*p<<endl; cout<<"指针的值: "<<p<<endl; cout<<"i的地址: "<<&i<<endl; return 0;}

原创粉丝点击