请考虑以下事项:

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)中的练习,这个问题是关于引用初始化。尽管如此,首先完全忽略了参考点是非常尴尬的。 :)

有帮助吗?

解决方案

ival 不是文字值, 1.01 是文字值。它被复制到 ival 这是一个变量,绝对可以将它的引用分配给另一个变量。

其他提示

初始化引用后,它是初始化引用的别名。初始化参考后,您无法更改参考引用的内容。但是,您可以更改引用引用的“事物”(如果引用不是 const )。

最后一行实际上将变量 ival 设置为1.01(再次)。

您可能会惊讶地发现可以执行此操作:

const int& x = 42;        // No error!

C ++允许使用文字值(或其他右值)初始化 const 引用。实际发生的是编译器通过复制RHS创建临时值,并初始化引用以引用该临时值。编译器确保临时保持活动状态直到作用域退出(即在这种情况下 x 超出范围时)。

请注意,在初始化类的成员变量时,这不起作用。

哇哇哇哇? :)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top