Nós já sabemos que o parâmetro &
refere-se à referência em C/C++ , mas a partir do C++11 podemos encontrar o &&
e ele se refere ao valor ao outro lado da declaração.
De forma mais objetiva podemos dizer, por exemplo, que:
&& = &
Equivale à:
int x = 3;
Lógico, os valores e tipos são de exemplo.
Mas em síntese, um é o lvalue
e o outro o rvalue
.
Em C++03 (e antes), os temporários (denominados “rvalues”, já que frequentemente ficam no lado direito de uma atribuição) foram concebidos para nunca serem modificáveis - assim como em C - e foram considerados indistinguíveis dos tipos const T&;
, no entanto, em alguns casos, os temporários podem ter sido modificados, um comportamento que foi até considerado uma brecha útil.
C++11 adiciona um novo tipo de referência não const
chamado de referência rvalue , identificado por T&&
. Refere-se a temporários que podem ser modificados após serem inicializados, com o propósito de permitir “mover semântica”.
&&
como parâmetro , vejamos as saída:#include <iostream>
void the_int( const int * && i ){
std::cout << &i << '\n'; // endereço
std::cout << i << '\n'; // cópia
std::cout << *i << '\n'; // valor
}
int main(){
int &&x = 3;
the_int( &x );
return 0;
}
Ou seja, um ponteiro de um valor do rvalue, mas o ponteiro dele mesmo.
string
#include <iostream>
void the_string( const std::string * && ok ){
std::cout << "Ok: " << *ok << '\n';
}
int main(){
std::string && ok = "More ok!";
the_string( &ok );
return 0;
}
Lógico que essa saída será somente o valor
Eu particularmente não vejo nenhuma utilidade disso nos códigos que eu crio, mas esse artigo serve para sabermos o que significa quando vermos um duplo ‘e’ comercial em algum código e entendermos como eles são utilizados e quais valores retornados .
E em resumo, de acordo como há na descrição dessa sintaxe , o C++ 11 conseguiu resolver o problema de cópias desnecessárias do C++03 e anteriores, mas deve ser usado com cuidado .
Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço: