C++ 出现在函数参数中的寄存器说明符
我试图理解,将C++ 出现在函数参数中的寄存器说明符,c++,register-keyword,C++,Register Keyword,我试图理解,将register说明符应用于函数参数的意义是什么。以下代码有效: #include <iostream> using std::cout; struct A { A(){ cout << "A\n"; } ~A(){ cout << "~A\n"; } }; void foo(register A a) { } int main() { cout << "first line\n"; foo(
register
说明符应用于函数参数的意义是什么。以下代码有效:
#include <iostream>
using std::cout;
struct A
{
A(){ cout << "A\n"; }
~A(){ cout << "~A\n"; }
};
void foo(register A a)
{
}
int main()
{
cout << "first line\n";
foo(A());
cout << "last line\n";
}
#包括
使用std::cout;
结构A
{
(){coutregister
是一个古老的关键字,其起源可以追溯到K&R C。它的目的是提示编译器将变量保留为处理器寄存器,而不是从内存中加载和卸载数据,这会产生开销。当您访问此变量时,通常会使用声明变量时保存的一两条指令那时候他的登记册很值钱
从那时起,编译器已经非常擅长优化代码,而这个关键字失去了它的作用。现在,除非你告诉编译器无论如何都要使用它,否则大多数实现都会忽略它。在任何地方应用它有什么意义?没有意义。寄存器
是一个不可操作的选项,无论是应用于参数还是其他方面IST仅用于向后兼容。如上所述:函数参数在大多数情况下都是局部变量。register
对局部变量有意义,对参数也同样有意义。很可能[dcl.stc]/3也适用于函数参数:“一个寄存器
说明符是对实现的一个提示,表明这样声明的变量将被大量使用。”请注意,“不推荐使用寄存器
关键字作为存储类说明符。”[depr.register]