c++ 11标准引用,不使用左值初始化右值引用
C++11 standard ref for not initializing rvalue reference with lvalue?
考虑以下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)
- 是一个xvalue,类的右值,数组的右值或函数的左值(否?),或
- 具有类类型[snip] (no)
是否这两点都不适用?所以我们应该假设它是病态的,因为两者都不是?
如何从标准中确定不能用int类型的左值初始化对int的右值引用?
我想你错过了那篇文章的最后一点(8.5.3p5),那就是:
如果T1与T2有引用关系,且T2的引用为右值
相关文章:
- C++-模板嵌套类的引用初始化无效
- 在引用初始化中使用已删除的复制构造函数进行复制初始化
- 模板流运算符重载错误:引用初始化无效,与basic_istream和basic_ifstream之间的差异有关
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- 类型为"短整型 (&)"的引用初始化无效
- 引用初始化和常量表达式
- 在Visual Studio 2013中为rvalue引用初始化捕获
- 从大括号括起来的初始值设定项列表进行的Lvalue引用初始化无法编译
- Visual C++ 2015 中右值的非常量引用初始化无效
- 是否可以使用对派生类实例的基类引用初始化派生类引用
- 类型'int&'的引用初始化无效,传递参数 1 时出错
- 引用初始化表单
- 从类型为"int*"的临时引用初始化类型为"int&"的非常量引用无效
- 简单的C++日志记录类-ostream引用初始化
- 错误:类型为"cv::Mat&"的非常量引用初始化无效
- 为什么我收到类型为"const vec&"的引用初始化无效
- 从类型为"char*"的临时引用初始化类型为"char*&"的非常量引用
- 为什么这会发送一个关于引用初始化无效的错误
- 为什么此处不对引用初始化执行复制初始化?
- std::vector不会为多个向量条目创建cv::Mat的新引用——初始化矩阵时,数据会被覆盖