Qual é R-valor de referência que está prestes a entrar em próxima c ++ padrão?

StackOverflow https://stackoverflow.com/questions/846812

  •  21-08-2019
  •  | 
  •  

Pergunta

O que é R-valor de referência que está prestes a entrar em próxima c ++ padrão?

Foi útil?

Solução 3

Aqui é um tempo muito longo artigo de Stephan T. Lavavej

Outras dicas

Dê uma olhada Por que C ++ 0x rvalue não referência o padrão? , o que explica seu uso prático muito bem.

Ele permite que você distinguir entre código que chamou você passar uma referência a um valor de r ou um l-value. Por exemplo:

void foo(int &x);

foo(1); // we are calling here with the r-value 1. This would be a compilation error

int x=1;
foo(x); // we are calling here with the l-value x. This is ok

Ao utilizar uma referência r-valor, que pode permitir a passagem em referências para os temporários, tais como no primeiro exemplo acima:

void foo(int &&x); // x is an r-value reference

foo(1); // will call the r-value version

int x=1;
foo(x); // will call the l-value version

Esta é mais interessante quando estamos querendo passar o valor de retorno de uma função que cria um objeto para outra função que utiliza esse objeto.

std::vector create_vector(); // creates and returns a new vector

void consume_vector(std::vector &&vec); // consumes the vector

consume_vector(create_vector()); // only the "move constructor" needs to be invoked, if one is defined

O construtor movimento actua como o construtor de cópia, mas está definido para dar uma referência r-valor, em vez de uma referência de l-valor (const). É permitido o uso de semântica valor-R para mover os dados fora do temporário criado no create_vector e empurrá-los para o argumento para consume_vector sem fazer uma cópia caro de todos os dados no vetor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top