c++ 11标准引用,不使用左值初始化右值引用

C++11 standard ref for not initializing rvalue reference with lvalue?

本文关键字:引用 初始化 标准 c++      更新时间:2023-10-16

考虑以下c++ 11代码:

int& f();
int&& i = f();

这会产生一个错误:

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

我明白为什么,但我正试图从语言的标准来证明这一点。

释义c++ 11 N3485 8.5.3.5:

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

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

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

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

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

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

我想你错过了那篇文章的最后一点(8.5.3p5),那就是:

如果T1与T2有引用关系,且T2的引用为右值