鉴于
#include <iostream>
using namespace std;
struct Test {
public:
Test() {
cout << "Default constructor" << endl;
}
Test(const Test &) {
cout << "Copy constructor" << endl;
}
};
int main() {
Test && t1 = Test();
}
为什么在初始化t1时,没有使用Test的复制构造函数?从阅读reference initialization开始,object
似乎是一个临时应该调用复制初始化。或者这是一个类类型表达式?如果是这种情况,有人可以定义类类型表达式是什么(我很难用Google搜索)。
答案 0 :(得分:6)
Test && t1 = Test();
不会创建对副本的引用,而Test()
会生成一个临时对象,而t1
会直接绑定到该临时对象(并且临时的生命周期会延长)到t1
)的生命周期。
2)使用初始化程序声明命名的右值引用变量时
否则,如果引用是右值引用或对const的左值引用:
如果object是xvalue,类prvalue ,数组prvalue或函数左值类型,它是T或从T派生,同等或更少cv限定,则 reference与初始化表达式的值或其基础子对象绑定。