Sí y No.
Depende de la versión de C++, que está utilizando.
- C++ y C++ 98 03 no son compatibles con
explicit
operadores de conversión de tipo
- Pero C++ 11 no.
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
}
Compilarlo con g++ -std=c++0x
, obtendrá este error:
prog.cpp:13:20: error: conversion from 'A' to non-scalar type 'std::string' requested
demostración en línea: http://ideone.com/DJut1
Pero tan pronto como se escribe:
std::string s = static_cast<std::string>(a); //ok - explicit conversion
El error desaparece: http://ideone.com/LhuFd
BTW, en C++ 11, el operador de conversión explícita se refiere como "operador contextual conversión" si se convierte en boolean. Además, si usted quiere saber más acerca de las conversiones implícitas y explícitas, lea este tema:
Espero que ayude.
+1. ¿Podría publicar un ejemplo del código C++ 11, por favor? – FailedDev
@FailedDev: Listo. :-) – Nawaz
¡Muchas gracias! – FailedDev