什么';C+;中的register关键字有误+;? 我在读,它说登记器< /Cord>关键字很可能会从下一个C++标准中删除。它还说,register在2011年被弃用。那么,寄存器存储类说明符有什么问题
我认为现代编译器非常智能,它们隐式优化了常用变量的速度(快速访问),并将它们放入CPU寄存器中什么';C+;中的register关键字有误+;? 我在读,它说登记器< /Cord>关键字很可能会从下一个C++标准中删除。它还说,register在2011年被弃用。那么,寄存器存储类说明符有什么问题,c++,cpu-registers,c++17,storage-class-specifier,C++,Cpu Registers,C++17,Storage Class Specifier,我认为现代编译器非常智能,它们隐式优化了常用变量的速度(快速访问),并将它们放入CPU寄存器中 P>但是,C++专家也说不使用或不使用登记器>代码>。因此,register关键字有什么问题?您已经基本回答了自己的问题: 我认为现代编译器非常智能,因此它们隐式优化了常用变量的速度(快速访问),并将它们放入CPU寄存器中 这正是当前点优化者非常擅长寄存器分配的原因,程序员通过register关键字强制执行他们的意愿的任何尝试都可能导致悲观情绪,因此被编译器忽略。请记住,register从来都不是绑
<> P>但是,C++专家也说不使用或不使用<代码>登记器>代码>。因此,
register
关键字有什么问题?您已经基本回答了自己的问题:
我认为现代编译器非常智能,因此它们隐式优化了常用变量的速度(快速访问),并将它们放入CPU寄存器中
这正是当前点优化者非常擅长寄存器分配的原因,程序员通过register
关键字强制执行他们的意愿的任何尝试都可能导致悲观情绪,因此被编译器忽略。请记住,register
从来都不是绑定要求,始终只是对编译器的提示。既然他们对这些提示嗤之以鼻,那么这个关键词就已经过时了,毫无用处了
因此,直接回答您的问题“它有什么问题:”它不再有任何用途,因为它是唯一的一个(“提示编译器将它放入寄存器”)现在被编译器所取代,编译器在这方面比人类好得多。标准不要求将
寄存器
变量放入寄存器,相反,它只是编译器对经常使用的变量的提示。编译器可以自己决定它
这里是关于您发布的链接中的注册
关键字的条款:
寄存器
说明符是对实现的一种提示,即这样声明的变量将被大量使用。[注意:提示可以忽略,在大多数实现中,如果使用变量的地址,提示将被忽略。不推荐使用此用法(参见D.2)。--结束注意]
我想你已经回答了:这只是对编译器的一个建议,编译器可以更好地优化变量的存储。这是一个无用的,有时会误导的提示。(类似于代码< >内联 >不再意味着函数将内联,只能安全地定义多次。考虑另一方面:如果一个实现实际上将每个<代码>登记器< /C>变量都登记在一个寄存器中,那会怎样?这怎么办?一些答案。