可以先看这篇,说明了右值赋值构造函数存在的意义: CSDN
返回vector的左值
std::vector<int> foo1()
{
std::vector<int> v;
return v;
}
int main()
{
std::vector<int> v = foo1();
return 1;
}
果然进了右值赋值构造函数里,都说面对函数内部返回的对象,都会进行优化。
优化的途径就是走右值?
大家口中所说编译器进行了优化,可能就是指的这种情况。
最后走了swap,内部存储的wstring并没有参与什么:
返回vector的右值
要是用return std::vector<int>{};
情况就有所不同了
std::vector<int> foo1()
{
//std::vector<int> v;
//return v;
return std::vector<int>{};
}
int main()
{
std::vector<int>&& v = foo1();
return 1;
}
就不会走vector的右值赋值构造函数。整个过程就初始化了一次vector。
如果不用&&接住右值呢
奇怪的事情发生了,这种情况下和《返回vector的右值》的效果一样
可能所说的RVO是这样的,编译器进行了优化。
std::vector<int> foo1()
{
//std::vector<int> v;
//return v;
return std::vector<int>{};
}
int main()
{
std::vector<int> v = foo1();
return 1;
}