2010-06-15 26 views

Odpowiedz

13

To operator obsady. Każda klasa, która definiuje ten typ, może być używana wszędzie tam, gdzie wymagane jest std::string. Na przykład,

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

operatorzy odlewane są prawie zawsze złym pomysłem, ponieważ jest zawsze lepszy sposób, aby osiągnąć ten sam rezultat. W powyższym przypadku lepiej jest zdefiniować operator<<(std::ostream&, const Foo&).

+9

Sprzeciwiam się określeniu "zawsze", jest zbyt bezwzględne. Myślę, że "zwykle" byłby lepszym terminem. –

+1

Martin, nie powiedziałem "zawsze". Powiedziałem "prawie zawsze", co nie jest absolutne, a IMO jest bliższe prawdzie niż "zwykle". –

+10

Loki, twój własny komentarz jest zbyt bezwzględny. Czy należy zawsze * zawsze * unikać terminu "zawsze", czy też zwykle * należy unikać terminu "zawsze"? – Alyoshak

20

Jest to conversion operator, który pozwala obiekt jawnie lub niejawnie rzucić na std :: string. W przypadku takiego rzutu operator jest wywoływany, a wynik rzutowania jest wynikiem inwokacji.

Jako przykład niejawnej obsady, załóżmy, że masz funkcję, która przyjęła typ std::string lub const std::string&, ale nie podany typ obiektu. Przekazanie obiektu do tej funkcji spowoduje wywołanie operatora konwersji, a wynik zostanie przekazany do funkcji zamiast typu.

Powiązane problemy