Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++;11 我已经读到(例如)在C++ 11中禁止登记器< /Cord>关键字。因此,在较新版本的标准中是否有与此存储类说明符等效的说明符,或者由编译器负责_C++_C++11 - Fatal编程技术网

替换不推荐使用的寄存器关键字C++;11 我已经读到(例如)在C++ 11中禁止登记器< /Cord>关键字。因此,在较新版本的标准中是否有与此存储类说明符等效的说明符,或者由编译器负责

替换不推荐使用的寄存器关键字C++;11 我已经读到(例如)在C++ 11中禁止登记器< /Cord>关键字。因此,在较新版本的标准中是否有与此存储类说明符等效的说明符,或者由编译器负责,c++,c++11,C++,C++11,如果你使用关键字,编译器绝对不会听你的(在某些情况下,它保证编译器会忽略你,就像你取了地址一样) 这种暗示功能现在已被弃用,没有替代品(这是标准的。内联asm不是标准的,但可以使用)。假设编译器可以比程序员更好地为寄存器分配变量,因此,register已被弃用,新标准中没有其他等效关键字。我们可以找到弃用register的理由,其中说(强调我的): register关键字提供的功能很少,不再提供更多功能 而不是一张便笺上所说的通常被忽略的提示。应该是 在此版本的标准中已弃用,释放保留名称 在未来

如果你使用关键字,编译器绝对不会听你的(在某些情况下,它保证编译器会忽略你,就像你取了地址一样)


这种暗示功能现在已被弃用,没有替代品(这是标准的。内联asm不是标准的,但可以使用)。

假设编译器可以比程序员更好地为寄存器分配变量,因此,
register
已被弃用,新标准中没有其他等效关键字。

我们可以找到弃用register的理由,其中说(强调我的):

register关键字提供的功能很少,不再提供更多功能 而不是一张便笺上所说的通常被忽略的提示。应该是 在此版本的标准中已弃用,释放保留名称 在未来的标准中使用,就像汽车在今年被重新使用一样 同样无用的时间

C++17的版本是,但仍保留供将来使用

在2011 C++标准中登记寄存器关键字,<强> AS 语言中已经隐含了这种效果。它仍然是留给我们的 以后按标准使用,是时候去掉它的残留了 规格

由于编译器只需模拟程序的可观察行为,因此优化器可以通过“仿佛”规则选择将变量保留在寄存器中,前提是它不会影响可观察行为,并且在大多数情况下可能会做出更好的选择,因为它通常具有更多信息

如需参考,请参见
gcc
邮件列表,其中一条在线程中写道:

我认为“register”关键字从未影响过寄存器分配 在海湾合作委员会。为此,你必须回到20世纪70年代的编译器

不过,register关键字在gcc中仍然有用途 扩展:gcc将其与asm结合使用以实现注册 变量


@H2CO3:
inline
对于许多编译器来说仍然是必需的,它们一次只能优化一个翻译单元。@H2CO3:
inline
允许在多个TU中定义,因此该函数可以在任何调用它的地方进行内联。没有它,单个TU中只能有一个定义,一些编译器将无法从其他TU内联调用它。@H2CO3:
inline
。这只是误解。一些好的读物:@Hariprasad也可以看到Herb Sutter的文章“会忽略你,就像你取了地址”哇!我的C书说编译器在这种情况下必须出错。@约书亚在C中,不能使用寄存器变量的地址,但是在C++中,变量登记登记器与没有任何存储类说明符声明的变量在语义上是不可区分的(从这里的注释部分)。所以,C的C书对C来说是正确的,但C++不是正确的。登记关键字仍然有一些用途;例如,请参见“SaAFik”是否应该从当前的C++代码中删除登记关键字?@ MunAjalAL是,否则您的代码将停止使用新的编译器。即使编译器不能评测代码执行和手动优化。@CodeLourger那么我一直听说的“评测引导优化”(PGO)是什么?哦,对了。尽管如此,我还是不愿意承认这个假设。