c++ casting operator-keyword explicit

c++ - ¿Puede un operador de reparto ser explícito?



casting operator-keyword (1)

Si y no.

Depende de qué versión de C ++ estés usando.

  • C ++ 98 y C ++ 03 no admiten operadores explicit conversión de tipo
  • Pero C ++ 11 sí.

Ejemplo,

struct A { //implicit conversion to int operator int() { return 100; } //explicit conversion to std::string explicit operator std::string() { return "explicit"; } }; int main() { A a; int i = a; //ok - implicit conversion std::string s = a; //error - requires explicit conversion }

Compile con g++ -std=c++0x , obtendrá este error:

prog.cpp: 13: 20: error: conversión de ''A'' a tipo no escalar ''std :: string'' solicitado

Demostración en línea: http://ideone.com/DJut1

Pero tan pronto como escribes:

std::string s = static_cast<std::string>(a); //ok - explicit conversion

El error desaparece: http://ideone.com/LhuFd

Por cierto, en C ++ 11, el operador de conversión explícito se conoce como "operador de conversión contextual" si se convierte en booleano . Además, si desea obtener más información sobre las conversiones implícitas y explícitas, lea este tema:

Espero que ayude.

Cuando se trata de constructores, agregar la palabra clave explicit evita que un compilador entusiasta cree un objeto cuando no era la primera intención del programador. ¿Hay tal mecanismo disponible para los operadores de casting también?

struct Foo { operator std::string() const; };

Aquí, por ejemplo, me gustaría poder convertir a Foo en una std::string , pero no quiero que ese molde se produzca implícitamente.