C++中的常量折叠
先看例子:
#include <iostream> using namespace std; int main() { const int a = 10; int * p = (int *)(&a); *p = 20; cout<<"a = "<<a<<", *p = "<<*p<<endl; return 0; }輸出:a = 10, *p = 20
明明p指向的就是變量a所在的內存,可輸出為什么不一樣呢?這是常量折疊在作遂。
這個"常量折疊"是 就是在編譯器進行語法分析的時候,將常量表達式計算求值,并用求得的值來替換表達式,放入常量表。可以算作一種編譯優(yōu)化。
因為編譯器在優(yōu)化的過程中,會把碰見的const全部以內容替換掉(跟宏似的: #define pi 3.1415,用到pi時就用3.1415代替);但是在運行階段,它的內存里存的東西確實改變了!!! 簡單的說就是,當編譯器處理const的時候,編譯器會將其變成一個立即數(shù)。?轉載于:https://www.cnblogs.com/qiaoconglovelife/p/5344928.html
總結
- 上一篇: 水系图一般在哪里找得到_进展 | 水系钾
- 下一篇: c/c++参考文档