2010-06-15 36 views

Respuesta

13

Es un operador de reparto. Cualquier clase que defina este tipo se puede usar en cualquier lugar donde se requiera std::string. Por ejemplo,

class Foo { 
public: 
    operator std::string() const { return "I am a foo!"; } 
}; 
... 
Foo foo; 
std::cout << foo; // Will print "I am a foo!". 

operadores de conversión son casi siempre una mala idea, ya que no es siempre una mejor manera de conseguir el mismo resultado. En el caso anterior, es mejor que defina operator<<(std::ostream&, const Foo&).

+9

Objeto al término "siempre", es demasiado absoluto. Creo que "por lo general" sería un término mejor. –

+1

Martin, no dije "siempre". Dije "casi siempre", que no es absoluto, y es, IMO, más cercano a la verdad que "generalmente". –

+10

Loki, tu propio comentario es demasiado absoluto. ¿Debería uno * siempre * evitar el término "siempre", o debería uno * generalmente * evitar el término "siempre"? – Alyoshak

20

Es un conversion operator que permite que el objeto sea explícita o implícitamente enviado a std :: string. Cuando se produce tal conversión, se invoca al operador y el resultado del lanzamiento es el resultado de la invocación.

Como ejemplo de un molde implícito, suponga que tiene una función que acepta el tipo std::string o const std::string&, pero no el tipo de objeto dado. Al pasar su objeto a esa función, se invocará al operador de conversión, y el resultado pasará a la función en lugar de a su tipo.

Cuestiones relacionadas