请考虑以下事项:
int ival = 1.01;
int &rval = 1.01; // error: non-const reference to a const value.
int &rval = ival;
rval = 1.01;
& rval对文字值的第一次分配失败了。如果我注释掉该行代码编译并运行。我理解为什么初始化失败了,但我很困惑为什么rval的赋值在最后一行工作。我认为不允许分配对文字值的引用。
编辑:感谢您的快速解答。我很想删掉这个以掩饰我的耻辱,但我想我会把它留在这里,所以其他人都可以指出并笑。
在我自己的辩护中,我正在阅读一本书(C ++ Primer)中的练习,这个问题是关于引用初始化。尽管如此,首先完全忽略了参考点是非常尴尬的。 :)
答案 0 :(得分:6)
ival
不是文字值,1.01
是字面值。它被复制到ival
这是一个变量,它绝对可以将它的引用分配给另一个变量。
答案 1 :(得分:6)
初始化引用后,它是初始化引用的别名。初始化参考后,您无法更改参考引用的内容。但是,您可以更改引用引用的“事物”(如果引用不是const
)。
最后一行实际上将变量ival
设置为1.01(再次)。
答案 2 :(得分:4)
您可能会惊讶地发现可以执行此操作:
const int& x = 42; // No error!
C ++允许使用文字值(或其他右值)初始化 const 引用。实际发生的是编译器通过复制RHS创建临时值,并初始化引用以引用该临时值。编译器确保临时保持活动状态直到范围退出(即在这种情况下x
超出范围时)。
请注意,在初始化类的成员变量时,这不起作用。
哇哇哇哇? :)