考虑以下 C++11 代码:
int& f();
int&& i = f();
这会产生一个错误:
cannot bind ‘int’ lvalue to ‘int&&’
我明白为什么,但我试图从标准中的语言来证明它是合理的。
解释 C++11 N3485 8.5.3.5:
对 int 的引用由 int 类型的表达式初始化,如下所示:(是)
如果引用是右值引用:(是)
如果初始化表达式:(是)
- 是 xvalue、类纯右值、数组纯右值或函数左值(否?),或
- 有类类型 [snip] (no)
是不是这两点都不适用?所以我们应该假设它是不正确的,因为两者都不是?
您如何从标准中确定您不能使用 int 类型的左值初始化对 int 的右值引用?