3

考虑以下 C++11 代码:

int& f();

int&& i = f();

这会产生一个错误:

cannot bind ‘int’ lvalue to ‘int&&’

我明白为什么,但我试图从标准中的语言来证明它是合理的。

解释 C++11 N3485 8.5.3.5:

对 int 的引用由 int 类型的表达式初始化,如下所示:(是)

如果引用是右值引用:(是)

如果初始化表达式:(是)

  1. 是 xvalue、类纯右值、数组纯右值或函数左值(否?),或
  2. 有类类型 [snip] (no)

是不是这两点都不适用?所以我们应该假设它是不正确的,因为两者都不是?

您如何从标准中确定您不能使用 int 类型的左值初始化对 int 的右值引用?

4

1 回答 1

3

我认为你错过了那篇文章的最后一个项目符号(8.5.3p5),它指出:

如果 T1 与 T2 引用相关并且引用是右值引用,则初始化表达式不应是左值。

于 2013-05-31T01:30:24.980 回答