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

eda*_*els 1 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();
}
Run Code Online (Sandbox Code Playgroud)

为什么在初始化t1时,不使用Test的复制构造函数?从读取引用初始化看来,它object是一个临时应该调用复制初始化.或者这是一个类类型表达式?如果是这种情况,有人可以定义类类型表达式是什么(我很难用Google搜索).

bam*_*s53 6

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


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

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

如果object是一个xvalue,一个类prvalue,一个数组prvalue或一个函数左值类型,它是T或从T派生,等于或小于cv限定,那么引用绑定到初始化表达式的值或其基础子对象.