我正在阅读这篇文章,它说该register关键字很可能会从下一个 C++ 标准中删除。它还说它register在 2011 年被弃用。那么,register存储类说明符有什么问题?
我认为现代编译器非常聪明,它们隐式优化常用变量以提高速度(快速访问)并将它们放入 CPU 寄存器中。
但是,C++ 专家也说不要或永远不要使用register. 因此,register关键字有什么问题?
我正在阅读这篇文章,它说该register关键字很可能会从下一个 C++ 标准中删除。它还说它register在 2011 年被弃用。那么,register存储类说明符有什么问题?
我认为现代编译器非常聪明,它们隐式优化常用变量以提高速度(快速访问)并将它们放入 CPU 寄存器中。
但是,C++ 专家也说不要或永远不要使用register. 因此,register关键字有什么问题?
你几乎已经回答了你自己的问题:
我认为现代编译器非常聪明,因此它们隐式优化常用变量以提高速度(快速访问)并将它们放入 CPU 寄存器中。
正是这一点——优化器现在非常擅长寄存器分配,以至于程序员通过register关键字强制执行他们的意愿的任何尝试都可能导致悲观情绪,因此编译器会简单地忽略它。请记住,这register从来都不是绑定要求,始终只是对编译器的提示。既然他们理所当然地嘲笑这些提示,那么关键字就已经过时且无用了。
所以,直接回答你的“有什么问题”的问题:它不再有任何用途,因为它曾经拥有的唯一一个(“提示编译器将这个东西放入寄存器”)现在被编译器在这方面比人类要好得多。
标准不要求将该register变量放入寄存器中,相反,它只是对经常使用的变量的编译器的提示。编译器可以自行确定。
在这里,关于register您发布的链接中的关键字的条款:
说明
register符是对实现的提示,即如此声明的变量将被大量使用。[注意:提示可以被忽略,并且在大多数实现中,如果获取变量的地址,它将被忽略。这种用法已被弃用(见 D.2)。——尾注]