【发布时间】:2014-07-12 02:46:37
【问题描述】:
我看过代码,其中带有 register 关键字的变量通过引用传递给函数。
版本 1:
inline static void swap(register int &a, register int &b)
{
register int t = a;
a = b;
b = t;
}
版本 2:
inline static void swap(register int a, register int b)
{
register int t = a;
a = b;
b = t;
}
这两个版本有什么区别?
据我了解,a 和 b 保存在 registers 中,因此引用运算符不应该对所做的更改产生任何影响这些寄存器中的值应该在调用者-被调用者边界上保持不变,而不使用引用运算符。
【问题讨论】:
-
register关键字已弃用。无论它是否存在,99% 的可能性都不会产生影响。 -
引用转换为机器代码级地址,这会阻止将变量映射到寄存器,除了可能的 PDP-11,AFAIK 没有 C++ 编译器。
-
@Alf 不,PDP-11 也没有寄存器地址。
-
我想知道根据语言规范是否需要将引用与内存中的位置相关联。或者它们可以被视为替代名称。
-
@cpp_noname 它们可以被视为替代名称,未指定任何特定引用是否需要存储。
标签: c++ compiler-construction pass-by-reference register-keyword