Devo devolver uma referência de valor (por std :: move'ing)?
A C ++ Next post no blog disse isso
A compute(…)
{
A v;
…
return v;
}
E seA
tem um construtor de copiar ou mover acessível, o compilador pode optar por elidir a cópia. Caso contrário, seA
tem um construtor de movimento,v
é movido. Caso contrário, seA
tem um construtor de cópia,v
é copiado. Caso contrário, um erro de tempo de compilação é emitido.
Eu pensei que deveria sempre devolver o valor semstd::move
porque o compilador seria capaz de descobrir a melhor escolha para os usuários. Mas em outro exemplo da postagem do blog
Matrix operator+(Matrix&& temp, Matrix&& y)
{ temp += y; return std::move(temp); }
Aqui ostd::move
é necessário porquey
deve ser tratado como um lvalue dentro da função.
Ah, minha cabeça quase explode depois de estudar este post no blog. Eu tentei o meu melhor para entender o raciocínio, mas quanto mais eu estudava, mais confuso ficava. Por que devemos devolver o valor com a ajuda destd::move
?