已弃用的注册关键字C++ 11的替换

Har*_*sad 26 c++ c++11

我已经读过(这里,例如)register在C++ 11中不推荐使用该关键字.因此,在标准的较新版本中是否存在与此存储类说明符等效的内容,或者它是否由编译器处理?

Sha*_*our 23

我们可以在缺陷报告809中找到弃用寄存器的基本原理:注册关键字的弃用说明(强调我的):

register关键字提供的功能非常少,只提供一个注释表示通常被忽略的提示.它应该在此版本的标准中弃用,将保留的名称释放出来用于未来的标准,就像这次重新使用auto一样无用.

去除寄存器用于C++ 17被批准在列涅萨会议,但它仍然保留以备将来使用.

register关键字在2011 C++标准中已弃用,因为其效果已隐含在该语言中.它仍然保留供标准未来使用,是时候删除它的退化规范.

由于as-if规则,编译器只需要模拟程序的可观察行为,因此优化器可以通过as-if规则选择将变量保留在寄存器中,如果它不会影响可观察的行为,并且可能会在大多数情况下做出更好的选择,因为它通常有更多信息

另请参阅"注册"C关键字的作用?gcc邮件列表中,该帖子中的一个回复说:

我认为"register"关键字不会影响gcc中的寄存器分配.为此你必须回到20世纪70年代的编译器.

但是,在gcc扩展中,register关键字仍然有用:gcc与asm结合使用它来实现寄存器变量.


soa*_*dos 15

如果您使用了关键字,那么编译器就不会保证会听你的(在某些情况下,它会保证它会忽略你,就像你拿到了地址一样).

此提示功能现已弃用,并且没有替换(这是标准的.inline asm不是标准的,但可以使用).

  • @Joshua“在 C 中,无法获取寄存器变量的地址,但在 C++ 中,声明为 register 的变量在语义上与未使用任何存储类说明符声明的变量无法区分”(来自此处的注释部分:http://en。 cppreference.com/w/cpp/language/storage_duration )。因此,您的 C 书适用于 C,但不适用于 C++。 (2认同)

pio*_*kuc 14

假设编译器可以比程序员更好地将变量分配给寄存器,因此register不推荐使用,新标准中没有其他等效关键字.