2010-06-15 10 views

Répondre

13

C'est un opérateur de moulage. Toute classe qui définit ce type peut être utilisée partout où un std::string est requis. Par exemple,

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

opérateurs Cast sont presque toujours une mauvaise idée, car il y a toujours une meilleure façon d'obtenir le même résultat. Dans le cas ci-dessus, il est préférable de définir operator<<(std::ostream&, const Foo&).

+9

Je m'oppose au terme "toujours", c'est trop absolu. Je pense que "habituellement" serait un meilleur terme. –

+1

Martin, je n'ai pas dit "toujours". J'ai dit "presque toujours" ce qui n'est pas absolu, et est, OMI, plus proche de la vérité que "habituellement". –

+10

Loki, votre propre commentaire est trop absolu. Devrait-on * toujours * éviter le terme "toujours", ou devrait-on * habituellement * éviter le terme "toujours"? – Alyoshak

20

C'est un conversion operator qui permet à l'objet d'être explicitement ou implicitement casté en std :: string. Lorsqu'un tel transtypage se produit, l'opérateur est appelé et le résultat du transtypage est le résultat de l'appel.

À titre d'exemple de distribution implicite, supposons que vous ayez une fonction qui a accepté le type std::string ou const std::string&, mais pas le type d'objet donné. Passer votre objet à cette fonction entraînerait l'invocation de l'opérateur de conversion, le résultat étant transmis à la fonction au lieu de votre type.

Questions connexes