Czy ktoś mógłby mi powiedzieć, co dokładnieoperator std :: string() const?
operator std::string()
oznacza?
Czy ktoś mógłby mi powiedzieć, co dokładnieoperator std :: string() const?
operator std::string()
oznacza?
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&)
.
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.
Sprzeciwiam się określeniu "zawsze", jest zbyt bezwzględne. Myślę, że "zwykle" byłby lepszym terminem. –
Martin, nie powiedziałem "zawsze". Powiedziałem "prawie zawsze", co nie jest absolutne, a IMO jest bliższe prawdzie niż "zwykle". –
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