Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';C+;中的register关键字有误+;? 我在读,它说登记器< /Cord>关键字很可能会从下一个C++标准中删除。它还说,register在2011年被弃用。那么,寄存器存储类说明符有什么问题_C++_Cpu Registers_C++17_Storage Class Specifier - Fatal编程技术网

什么';C+;中的register关键字有误+;? 我在读,它说登记器< /Cord>关键字很可能会从下一个C++标准中删除。它还说,register在2011年被弃用。那么,寄存器存储类说明符有什么问题

什么';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从来都不是绑

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


<> P>但是,C++专家也说不使用或不使用<代码>登记器>代码>。因此,
register
关键字有什么问题?

您已经基本回答了自己的问题:

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

这正是当前点优化者非常擅长寄存器分配的原因,程序员通过
register
关键字强制执行他们的意愿的任何尝试都可能导致悲观情绪,因此被编译器忽略。请记住,
register
从来都不是绑定要求,始终只是对编译器的提示。既然他们对这些提示嗤之以鼻,那么这个关键词就已经过时了,毫无用处了


因此,直接回答您的问题“它有什么问题:”它不再有任何用途,因为它是唯一的一个(“提示编译器将它放入寄存器”)现在被编译器所取代,编译器在这方面比人类好得多。

标准不要求将
寄存器
变量放入寄存器,相反,它只是编译器对经常使用的变量的提示。编译器可以自己决定它

这里是关于您发布的链接中的
注册
关键字的条款:

寄存器
说明符是对实现的一种提示,即这样声明的变量将被大量使用。[注意:提示可以忽略,在大多数实现中,如果使用变量的地址,提示将被忽略。不推荐使用此用法(参见D.2)。--结束注意]


我想你已经回答了:这只是对编译器的一个建议,编译器可以更好地优化变量的存储。这是一个无用的,有时会误导的提示。(类似于代码< >内联 >不再意味着函数将内联,只能安全地定义多次。考虑另一方面:如果一个实现实际上将每个<代码>登记器< /C>变量都登记在一个寄存器中,那会怎样?这怎么办?一些答案。