Я написал:Понимание копирование объектов
#include <iostream>
struct A
{
int a;
int b;
A() : a(10) { std::cout << "default ctor" << std::endl;}
~A(){ }
A(const A&){ std::cout << "copy ctor" << std::endl; }
A(const A&&){ std::cout << "move ctor" << std::endl; }
};
A init()
{
A a;
a.b = 20;
return a;
}
int main()
{
A a = init();
std::cout << a.b << std::endl;
}
Я ожидал, что A a = init()
навязывает вызов шаг-застройщик, но outpur является:
default ctor
20
«RVO» зависит от компилятора - VS2012 работает в отладочной работе, как и следовало ожидать, но в выпуске он ведет себя так же, как и ваша демонстрация, поэтому компилятор лучше решает встраивание. –