Entendendo a palavra-chave explicit em C++

Carrega o tipo correto do construtor .


Entendendo a palavra-chave explict em C++

Especifica que um construtor ou função de conversão (desde C++ 11) é explícito, ou seja, não pode ser usado para conversões implícitas e inicialização de cópia .

Vamos à um exemplo, você possui o seguinte código:

A função do_something recebe um parâmetro do tipo TerminalRoot, mas o compilador converte automaticamente para int:

#include <iostream>

class TerminalRoot {
  public:
    TerminalRoot( int num ) : m_var( num ){}

    int get_var(){
      return m_var;
    }

  private:
    int m_var;
};

void do_something( TerminalRoot terroo ){
  int x = terroo.get_var();
  std::cout << "O tipo é: " << typeid( x ).name() << '\n';
}

int main(){
  do_something( 963 );
  return 0;
}

E você não quer isso, você quer o que o tipo correto seja passado, pois você quer saber se há bug nesse tipo. Então você usa a palavra-chave explicit, mas ao compilar há um erro ao compilar:

#include <iostream>

class TerminalRoot {
  public:
    explicit TerminalRoot( int num ) : m_var( num ){}

    int get_var(){
      return m_var;
    }

  private:
    int m_var;
};

void do_something( TerminalRoot terroo ){
  int x = terroo.get_var();
  std::cout << "O tipo é: " << typeid( x ).name() << '\n';
}

int main(){
  do_something( 963 );
  return 0;
}

E então obtém o erro:

error: could not convert ‘963’ from ‘int’ to ‘TerminalRoot’

Não pode converter int para TerminalRoot

Logo, você precisa passar o tipo correto agora:

do_something( TerminalRoot( 963 ) );

#include <iostream>

class TerminalRoot {
  public:
    explicit TerminalRoot( int num ) : m_var( num ){}

    int get_var(){
      return m_var;
    }

  private:
    int m_var;
};

void do_something( TerminalRoot terroo ){
  int x = terroo.get_var();
  std::cout << "O tipo é: " << typeid( x ).name() << '\n';
}

int main(){
  do_something( TerminalRoot( 963 ) );
  return 0;
}

A saída é i( de int ), mas você passou o tipo correto e verificou que ele está funcionando . Para mais informações consulte o link: https://en.cppreference.com/w/cpp/language/explicit .


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


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!