Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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++ 出现在函数参数中的寄存器说明符_C++_Register Keyword - Fatal编程技术网

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
{

(){cout
register
是一个古老的关键字,其起源可以追溯到K&R C。它的目的是提示编译器将变量保留为处理器寄存器,而不是从内存中加载和卸载数据,这会产生开销。当您访问此变量时,通常会使用声明变量时保存的一两条指令那时候他的登记册很值钱


从那时起,编译器已经非常擅长优化代码,而这个关键字失去了它的作用。现在,除非你告诉编译器无论如何都要使用它,否则大多数实现都会忽略它。

在任何地方应用它有什么意义?没有意义。
寄存器
是一个不可操作的选项,无论是应用于参数还是其他方面IST仅用于向后兼容。如上所述:函数参数在大多数情况下都是局部变量。
register
对局部变量有意义,对参数也同样有意义。很可能[dcl.stc]/3也适用于函数参数:“一个
寄存器
说明符是对实现的一个提示,表明这样声明的变量将被大量使用。”请注意,“不推荐使用
寄存器
关键字作为存储类说明符。”[depr.register]