C++ · Intermediário · Inglês · Técnico
explicit
Palavra-chave que impede que um construtor de um argumento, ou um operador de conversão, seja usado em conversões implícitas. Obriga quem chama a pedir a conversão de forma visível.
Onde usar
Em code review, é pedido em construtores de um parâmetro para evitar conversões surpreendentes, como passar um inteiro onde se esperava um objeto Buffer.
Em código
struct Buffer {
explicit Buffer(std::size_t n) {}
};
void usa(Buffer b) {}
// usa(10); // erro
usa(Buffer(10)); // okExemplos
Make this single-argument constructor explicit.
Torne esse construtor de um argumento explicit.
Without explicit, a plain int silently converts into a Buffer.
Sem explicit, um int comum vira um Buffer silenciosamente.
Cuidado
Esquecer explicit em construtores de um argumento permite conversões silenciosas, como Buffer b = 5.