首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取代过时的寄存器关键字C++ 11

取代过时的寄存器关键字C++ 11
EN

Stack Overflow用户
提问于 2013-12-17 02:21:51
回答 3查看 19.8K关注 0票数 33

我读到(例如,here) register关键字在C++ 11中已被弃用。因此,在该标准的较新版本中是否有与此存储类说明符等效的内容,或者编译器是否会注意到它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-13 02:19:20

我们可以在defect report 809: Deprecation of the register keyword 中找到弃用寄存器的理由,它说(重点是我的):

注册关键字

的作用很小,只提供了一个提示,说明通常会忽略。它应该在这个版本的标准中被弃用,释放保留的名称以便在未来的标准中使用,就像auto这次因为同样无用而被重用一样。

C++17的removal of registerapproved 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结合使用来实现寄存器变量。

票数 32
EN

Stack Overflow用户

发布于 2013-12-17 02:24:57

如果你使用了关键字,它从来不能保证编译器会监听你(在某些情况下,它保证它会忽略你,就像你接受地址一样)。

这种提示功能现在已被弃用,并且没有替代功能(这是标准的。内联asm不是标准的,但可以使用)。

票数 17
EN

Stack Overflow用户

发布于 2013-12-17 02:25:51

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

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20618008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档