2010-06-15 2 views

ответ

13

Это оператор литья. Любой класс, который определяет этот тип, может использоваться везде, где требуется std::string. Например,

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

операторы Cast почти всегда плохая идея, так как это всегда лучший способ добиться того же результата. В приведенном выше случае вам лучше определить operator<<(std::ostream&, const Foo&).

+9

Я возражаю против термина «всегда», он слишком абсолютен. Я думаю, что «обычно» будет лучшим термином. –

+1

Мартин, я не говорил «всегда». Я сказал «почти всегда», что не является абсолютным, и является ИМО ближе к истине, чем «обычно». –

+10

Loki, ваш собственный комментарий слишком велик. Если один * всегда * избегает термина «всегда» или должен всегда * избегать термина «всегда»? – Alyoshak

20

Это conversion operator, который позволяет объекту явно или неявно отбрасываться в std :: string. Когда происходит такое приведение, оператор вызывается, и результат приведения является результатом вызова.

В качестве примера неявного литья предположим, что у вас есть функция, принимающая тип std::string или const std::string&, но не тип данного объекта. Передача объекта в эту функцию приведет к вызову оператора преобразования, при этом результат будет передан функции вместо вашего типа.

Смежные вопросы