Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么在将一个对象设置为另一个函数的返回值时调用move构造函数/赋值_C++ - Fatal编程技术网

C++ 为什么在将一个对象设置为另一个函数的返回值时调用move构造函数/赋值

C++ 为什么在将一个对象设置为另一个函数的返回值时调用move构造函数/赋值,c++,C++,我不太清楚为什么在执行b1=send(b2)时使用移动构造函数then赋值,它是move从参数b构造返回值,然后将返回值移动赋值给b1它的move从参数b构造返回值,然后,将该返回值移动分配给b1 为什么在将一个对象设置为另一个函数的返回值时调用move构造函数/赋值 send函数返回的b是一个参数,而不是局部变量: Constructor Constructor Copy Constructor Sending Move Constructor Move Assignment Destruct

我不太清楚为什么在执行
b1=send(b2)
时使用移动构造函数then赋值,它是move从参数
b
构造返回值,然后将返回值移动赋值给
b1

它的move从参数
b
构造返回值,然后,将该返回值移动分配给
b1

为什么在将一个对象设置为另一个函数的返回值时调用move构造函数/赋值

send
函数返回的
b
是一个参数,而不是局部变量:

Constructor
Constructor
Copy Constructor
Sending
Move Constructor
Move Assignment
Destructor
Destructor
Destructor
Destructor
因此,它是使用移动构造函数构造的:

Box send(Box b) {
    std::cout << "Sending" << std::endl;
    return std::move(b); // implicit std::move is applied.
}
如果创建并返回局部变量
c
,则不会看到移动构造:

Box(Box&& other);
框发送(框b){
方框c;
标准::cout
为什么在将一个对象设置为另一个函数的返回值时调用move构造函数/赋值

send
函数返回的
b
是一个参数,而不是局部变量:

Constructor
Constructor
Copy Constructor
Sending
Move Constructor
Move Assignment
Destructor
Destructor
Destructor
Destructor
因此,它是使用移动构造函数构造的:

Box send(Box b) {
    std::cout << "Sending" << std::endl;
    return std::move(b); // implicit std::move is applied.
}
如果创建并返回局部变量
c
,则不会看到移动构造:

Box(Box&& other);
框发送(框b){
方框c;

std::您是否必须创建一个临时返回值。我猜(不要引用我的话)这是因为您在send函数中创建了一个框的副本,因为它在离开函数的作用域时被删除,所以它调用移动分配,因为返回值可以被视为右值。但目前无法检查它,这只是我的猜测。您必须创建一个临时返回值。我猜(不要引用我的话)这是因为您在send函数中创建了一个框的副本,因为它在离开函数的作用域时被删除,所以它调用移动赋值,因为返回值可以被视为右值。但目前无法检查它,这只是我的猜测