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函数中创建了一个框的副本,因为它在离开函数的作用域时被删除,所以它调用移动赋值,因为返回值可以被视为右值。但目前无法检查它,这只是我的猜测