引自"Thinking in c ++"一书关于寄存器变量的部分:"寄存器变量的使用存在限制.你不能获取或计算寄存器变量的地址.一个寄存器变量只能在一个块中声明(你不能有全局或静态寄存器变量.)"
所以我写了这段程序来测试:
int global = 2;
// error
// register int global2 = 3;
int main() {
register int local2 = 2;
cout << local2 << " " << &local2 << endl;
}
Run Code Online (Sandbox Code Playgroud)
但是g ++没有生成错误,打印出local2的地址.那么为什么我可以在没有错误的情况下获取地址?
确实,从历史上看,你无法获取register变量的地址.
现在这只是一个历史性的脚注.当前的C++标准声明了register关键字
...指定命名变量具有自动存储持续时间(3.7.3).
换句话说,它意味着......没什么.不能对register变量采用地址的限制不再是当前C++标准的一部分.