Рассмотрим следующее:
ComplexObject foo()
{
ComplexObject temp;
//Do things with temp
ComplexObject result(temp, SOME_OTHER_SETTING); //1
//Do things with result. Do not use temp at all
return result; //2
}
ComplexObject foo()
{
ComplexObject temp;
//Do things with temp
ComplexObject result(std::move(temp), SOME_OTHER_SETTING); //1
//Do things with result. Do not use temp at all
return std::move(result); //2
}
с предположением, что у ComplexObject есть конструктор перемещения, который намного эффективнее конструктора копирования.
Разрешается ли компилятору эффективно преобразовывать первый код во второй код, поскольку он знает, что ComplexObject нельзя использовать для оставшейся части этого блока?