Qual a diferença dos parâmetros && e & em C++

Implementado a partir do C++ 11 .


Qual a diferença dos parâmetros && e & em C++

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”.


Exemplos de uso

  • Usando && 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.

  • Mais um exemplo acima usando 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++ !

Acompanhe o cpp::daily

Deseja aprender C++ e criar seus programas Gráficos e para Terminal com portabilidade para Linux e Windows?

Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:

Acesse o endereço:

https://terminalroot.com.br/cpp/ e saiba mais!


cppdaily cpp


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!