可以说我们有以下代码:
std::vector<int> f()
{
std::vector<int> y;
...
return y;
}
std::vector<int> x = ...
x = f();
Run Code Online (Sandbox Code Playgroud)
看来编译器有两种方法:
(a)NRVO:Destruct x,然后构造f()代替x.
(b)移动:在temp空间中构造f(),将f()移动到x,destruct f().
根据标准,编译器是否可以自由使用这两种方法?
c++ optimization move-semantics return-value-optimization c++11