Si y no.
Depende de la versión de C ++ que estés usando.
- C ++ 98 y C ++ 03 no admiten
explicit
operadores de conversión de tipos
- Pero C ++ 11 lo hace.
Ejemplo,
struct A
{
operator int() { return 100; }
explicit operator std::string() { return "explicit"; }
};
int main()
{
A a;
int i = a;
std::string s = a;
}
Compílelo con g++ -std=c++0x
, obtendrá este error:
prog.cpp: 13:20: error: conversión de 'A' a tipo no escalar 'std :: string' solicitada
Demostración en línea: http://ideone.com/DJut1
Pero tan pronto como escribas:
std::string s = static_cast<std::string>(a);
El error desaparece: http://ideone.com/LhuFd
Por cierto, en C ++ 11, el operador de conversión explícito se denomina "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.
toString
, en lugar deoperator std::string
. Por supuesto, esto puede causar problemas con algunas plantillas. Siempre lo he usadotoString
y nunca me ha causado ningún problema, pero imagino que esto podría depender de su estilo de codificación.