我正在阅读this并且它表示register
关键字很可能会从下一个C ++标准中删除。它还说2011年register
已被弃用。那么,register
存储类说明符有什么问题?
我认为现代编译器非常智能,它们隐式优化常用变量以提高速度(快速访问)并将它们放入CPU寄存器中。
然而,C ++专家也说不要或永远不要使用register
。因此,register
关键字的问题是什么?
答案 0 :(得分:9)
你几乎回答了自己的问题:
我认为现代编译器非常智能,因此它们隐含地优化了常用变量的速度(快速访问)和把它们放在CPU寄存器中。
正是点优化器现在非常擅长寄存器分配,以至于程序员通过register
关键字强制执行其意愿的任何尝试都可能导致悲观,因此编译器会忽略它。请记住,register
永远不是一个绑定要求,总是只是对编译器的提示。现在,他们理所当然地嘲笑这些提示,关键字已经过时且毫无用处。
所以,直接回答你的问题“它有什么问题:”它不再用于任何目的,因为它曾经拥有的唯一一个(“暗示编译器把这个东西放在寄存器中”)现在是编译器被方式取代,比人类更好。
答案 1 :(得分:1)
标准并不要求将register
变量放入寄存器,而只是为编译器提供经常使用的变量的提示。编译器可以自己确定它。
此处,您发布的链接中有关register
关键字的条款:
register
说明符是对实现的暗示,如此声明的变量将被大量使用。 [注意:提示可以忽略,在大多数实现中,如果采用变量的地址,它将被忽略。不推荐使用此功能(参见D.2)。 - 结束记录]