
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_somethingrecebe um parâmetro do tipoTerminalRoot, mas o compilador converte automaticamente paraint:
#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
intparaTerminalRoot
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++ !
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço: