rvalues e objetos temporários no FCD
Levei algum tempo para entender a diferença entre um rvalue e um objeto temporário. Mas agora o esboço final do comitê afirma na página 75:
Arvalue [...]é um xvalue,um objeto temporário ou seu subobjeto ou um valor que não esteja associado a um objeto.
Não acredito nos meus olhos. Isso deve ser um erro, certo?
Para esclarecer, eis como eu entendo os termos:
#include <string>
void foo(std::string&& str)
{
std::cout << str << std::endl;
}
int main()
{
foo(std::string("hello"));
}
Neste programa, existem doisexpressões que denotam o mesmoobjeto temporário: o valorstd::string("hello")
e o valorstr
. Expressões não são objetos, mas sua avaliação pode render uma. Especificamente, a avaliação de um pré-valor gera um objeto temporário, mas um pré-valor NÃO é um objeto temporário. Alguém concorda comigo ou eu fiquei louco? :)