在C ++中使用register关键字有什么问题?

时间:2015-05-23 16:51:36

标签: c++ cpu-registers c++17 storage-class-specifier

我正在阅读this并且它表示register关键字很可能会从下一个C ++标准中删除。它还说2011年register已被弃用。那么,register存储类说明符有什么问题?

我认为现代编译器非常智能,它们隐式优化常用变量以提高速度(快速访问)并将它们放入CPU寄存器中。

然而,C ++专家也说不要或永远不要使用register。因此,register关键字的问题是什么?

2 个答案:

答案 0 :(得分:9)

你几乎回答了自己的问题:

  

我认为现代编译器非常智能,因此它们隐含地优化了常用变量的速度(快速访问)和把它们放在CPU寄存器中。

正是点优化器现在非常擅长寄存器分配,以至于程序员通过register关键字强制执行其意愿的任何尝试都可能导致悲观,因此编译器会忽略它。请记住,register永远不是一个绑定要求,总是只是对编译器的提示。现在,他们理所当然地嘲笑这些提示,关键字已经过时且毫无用处。

所以,直接回答你的问题“它有什么问题:”它不再用于任何目的,因为它曾经拥有的唯一一个(“暗示编译器把这个东西放在寄存器中”)现在是编译器被方式取代,比人类更好。

答案 1 :(得分:1)

标准并不要求将register变量放入寄存器,而只是为编译器提供经常使用的变量的提示。编译器可以自己确定它。

此处,您发布的链接中有关register关键字的条款:

  

register说明符是对实现的暗示,如此声明的变量将被大量使用。 [注意:提示可以忽略,在大多数实现中,如果采用变量的地址,它将被忽略。不推荐使用此功能(参见D.2)。 - 结束记录]