2015-05-23 31 views
4

我讀this和它說,register關鍵字最有可能從下一個C++標準中刪除。它還說,register在2011年棄用那麼,什麼是錯register存儲類的?C++中的register關鍵字有什麼問題?

我覺得現代的編譯器是非常聰明的,他們隱式的優化常用的變量速度(快速訪問),並把它們放入CPU寄存器。

然而,C++專家也說沒有或從來不使用register。因此,register關鍵字有什麼問題?

+7

我想你已經回答了:這只是建議編譯器和編譯器更好地優化一個變量的存儲。 – m0nhawk

+3

這是一個無用的,有時誤導性的提示。 (有點像'內聯'不再意味着函數將內聯,只是它可以安全地定義多次)。 – nneonneo

+0

考慮另一方面:如果一個實現實際上將每個'register'變量放入一個寄存器中怎麼辦?怎麼可以處理?一些答案[這裏](https://stackoverflow.com/questions/28928674/can-an-implementation-consider-hints-as-actual-statements)。 – edmz

回答

9

你幾乎回答了你自己的問題:

我認爲現代編譯器很聰明,所以他們含蓄地優化了常用的速度(快速訪問)的變量&使他們在CPU寄存器中。

這正是點—優化器是在寄存器分配時下,從程序員的任何企圖通過register關鍵字執行自己的意志可能會導致pessimisatin,並因此簡單地被編譯器忽略這麼好。請記住register從來不是一個綁定需求,總是隻是提示編譯器。現在他們正確地嘲笑這樣的提示,這個關鍵字已經過時而且毫無用處。因此,要直接回答你的問題:「它有什麼問題:」它不再具有任何目的,因爲它是唯一有用的(「暗示編譯器把這個東西放在一個寄存器中」)是現在被編譯器取代的方式比這更好。

1

標準並不要求將register變量放入寄存器,而只是編譯器提示常用的變量。編譯器可以自行確定它。

這裏,關於條款從鏈接register關鍵字,您發佈的評論:

一個register符是一種提示,如此聲明的變量將被頻繁使用的實現。 [:該提示可以忽略不計,而且在大多數的實現,如果變量的地址是它會被忽略。這種用法已被棄用(見D.2)。 - 尾註]

相關問題