标准表示当函数返回值时,移动构造函数适用。它不太清楚,因为我认为当函数返回一个值时,它会创建一个在函数执行时构造的临时对象。当然,可以按照复制过程的顺序省略移动构造函数。但是我想考虑一下它没有的情况:
#include <iostream>
struct X
{
int a = 42;
X();
X(const X&&, int t = 24);
};
X::X(){ }
X::X(const X&&, int g)
{
std::cout << g << std::endl;
}
X foo()
{
return X();
}
int main()
{
foo(); //move-constructor called
}
如果我们有一个功能,请说
int foo()
{
int a = 5;
return a;
}
当函数返回值时,内存中实际发生了什么?第一个和第二个例子之间是否存在显着差异?