簡體   English   中英

編譯器行為和“寄存器存儲類說明符已棄用”

[英]Compiler behavior and “register storage class specifier is deprecated”

我正在使用-std=c++11測試一些C ++代碼。 我注意到以前沒見過的警告:

不推薦使用'register'存儲類說明符

標准對此有何看法(除了棄用之外)?

它是實現定義的嗎?

編譯器會將其作為提示並嘗試將值放入寄存器中嗎?

這會最終導致編譯失敗嗎?

也許別的什么?

C ++ 11, [dcl.stc]

3 - register說明符是對實現的暗示,如此聲明的變量將被大量使用。 [ 注意:提示可以忽略,在大多數實現中,如果采用變量的地址,它將被忽略。 不推薦使用此功能(參見D.2)。 - 結束說明 ]

建議刪除register關鍵字作為存儲說明符,同時將其保留為關鍵字: 刪除不推薦使用register關鍵字(n4340) 這可能會也可能不會在C ++ 1z中實現(暫定的C ++ 17); 它會對與C的兼容性帶來挑戰,其中register仍然具有語義效果(C register變量或參數不能采用其地址或受到數組到指針衰減的影響)。

它是實現定義的嗎?

它一直都是。

編譯器會將其作為提示並嘗試將值放入寄存器中嗎?

它是實現定義的。

這會最終導致編譯失敗嗎?

沒有。

編輯也許我誤解了最終編譯失敗的問題。 我認為它意味着當前編譯中的最終失敗。 如果問題是關於register關鍵字的未來,那么一切皆有可能:我不關心算命。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM