我读到(例如,here) register关键字在C++ 11中已被弃用。因此,在该标准的较新版本中是否有与此存储类说明符等效的内容,或者编译器是否会注意到它?
发布于 2015-06-13 02:19:20
我们可以在defect report 809: Deprecation of the register keyword 中找到弃用寄存器的理由,它说(重点是我的):
注册关键字
的作用很小,只提供了一个提示,说明通常会忽略。它应该在这个版本的标准中被弃用,释放保留的名称以便在未来的标准中使用,就像auto这次因为同样无用而被重用一样。
C++17的removal of register是approved in the Lenexa meeting,但它仍保留供将来使用。
注册表关键字在2011年的C++标准中已被弃用,,因为它的影响已经隐含在语言中。它仍然保留供该标准将来使用,是时候删除它的残留规范了。
由于有了as-if rule,编译器只需模拟程序的可观察行为,因此优化器可以通过as-if规则选择在寄存器中保留一个变量,如果它不会影响可观察到的行为,并且在大多数情况下可能会做出更好的选择,因为它通常包含更多信息。
另请参阅gcc邮件列表中的role of "register" C keyword?,该线程中的一个replies 表示:
我不认为" register“关键字会影响到在gcc中的寄存器分配。为此,您必须回到20世纪70年代的编译器。
不过,注册关键字在gcc的扩展中仍然有用处: gcc将其与asm结合使用来实现寄存器变量。
发布于 2013-12-17 02:24:57
如果你使用了关键字,它从来不能保证编译器会监听你(在某些情况下,它保证它会忽略你,就像你接受地址一样)。
这种提示功能现在已被弃用,并且没有替代功能(这是标准的。内联asm不是标准的,但可以使用)。
发布于 2013-12-17 02:25:51
假设编译器可以比程序员更好地将变量分配给寄存器,因此register已被弃用,新标准中没有其他等效的关键字。
https://stackoverflow.com/questions/20618008
复制相似问题