为什么在这里没有对参考初始化进行复制 - 初始化?

时间:2014-10-15 03:18:40

标签: c++ c++11 c++14

鉴于

#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搜索)。

1 个答案:

答案 0 :(得分:6)

Test && t1 = Test();不会创建对副本的引用,而Test()会生成一个临时对象,而t1会直接绑定到该临时对象(并且临时的生命周期会延长)到t1)的生命周期。


  

2)使用初始化程序声明命名的右值引用变量

     

否则,如果引用是右值引用或对const的左值引用:

     

如果object是xvalue,类prvalue ,数组prvalue或函数左值类型,它是T或从T派生,同等或更少cv限定,则 reference与初始化表达式的值或其基础子对象绑定。