const變量取地址-引發的疑惑

一下代碼輸出什麼?優化

 const int i = 1;
	 int *j =(int*) &i;
	 *j = 22;

	 cout << &i << " " << j << endl;
	 cout << i << " " << *j << endl;

const變量的地址取值後 發現結果居然不同 既然是同一個地址 爲何會是不一樣的結果,初步認爲是數據存儲區不同的問題,而後進一步發現非也。
設計

 既然最初設計爲const 那麼開發者確定不想對這個變量修改 那麼編譯器能夠優化爲 當即數 替 換原來引用 的地方 從而提升效率,以後上面代碼爲code

const int i = 1;
	 int *j =(int*) &i;
	 *j = 22;

	 cout << &i << " " << j << endl;
	 cout << 1 << " " << *j << endl;

volatile 告訴編譯器該變量是隨時可能發生變化的,每次使用它的時候必須從內存中讀取,於是編譯器生成的可執行碼會從新從i的地址讀取數據 內存

volatile  關鍵字能夠  禁止編譯器這種優化行爲開發

可是對於new 這種const 值是沒法肯定的 因此編譯器沒法優化 ,以下例編譯器

   int * const  i = new int;
		 int *j = (int*)i;
		 *j = 22;
		 cout << i << " " << j << endl;
		 cout << *i << " " << *j;

限制的i的值 運行期才能決定 因此編譯期 編譯器沒法優化,也就不存在那個」疑惑「了
編譯

相關文章
相關標籤/搜索