编译器行为和"register storage class specifier is deprecated"

Compiler behavior and "register storage class specifier is deprecated"

本文关键字:class specifier is deprecated storage register 编译器      更新时间:2023-10-16

我正在用-std=c++11测试一些c++代码。我注意到一个以前没见过的警告:

'register'存储类说明符已弃用

标准对此有什么规定(除了已弃用)?

是实现定义的吗?

编译器会把它作为一个提示,并试图把值在寄存器?

这最终会导致编译失败吗?

也许是别的什么?

c++ 11日 [dcl.stc] :

3—register说明符是对实现的一个提示,即这样声明的变量将被大量使用。[注意:该提示可以被忽略,并且在大多数实现中,如果变量的地址被忽略,则该提示将被忽略。这种用法已弃用(见D.2)。 -结束说明]

有建议移除register关键字作为存储说明符,保留其作为关键字:remove Deprecated Use of the register关键字(n4340)。这可能会在c++ 1z中实现,也可能不会(暂定c++ 17);它将对与C的兼容性提出挑战,其中register仍然具有语义效应(C register变量或参数的地址不能被占用或受到数组到指针的衰减)。

是实现定义的吗?

一直都是。

编译器会把它作为一个提示,并试图把值在寄存器?

定义。

这最终会导致编译失败吗?

EDIT也许我误解了最终编译失败的问题。我把它理解为当前编译的最终失败。如果问题是关于register关键字的未来,一切皆有可能:我不在乎算命。