Все гиды о operator<<
говорят, что вы должны вернуть выходной поток:Возвращение результата `<<` от оператора `` <<
ostream & operator<<(ostream &os, const Foo &x) { os<<"foo"; return os; }
Но не это может быть просто немного проще?
ostream & operator<<(ostream &os, const Foo &x) { return os<<"foo"; }
Если вызываемая <<
следует направляющие и возвращает первый параметр, то он должен быть 100% то же самое. Но я полагаюсь на то, что не гарантируется? Неужели это может произойти в некоторых случаях?
Зачем мне это нужно? Не только, чтобы спасти нажатия клавиш (мы не в codegolf.SE) Фактическое использование немного сложнее:
enum class Foo { A, B, C };
ostream & operator<<(ostream &os, const Foo &x) {
switch (x) {
case A: return os << "A";
case B: return os << "B";
case C: return os << "C";
}
return os << "Bad Foo (" << (int)x << ")";
}
многократного возвращения сделать код более простым и читаемым (представьте себе 50 случаев, а не 3) по сравнению ко всем альтернативам, которые я нашел. Обратите внимание, что отсутствие default
позволяет компилятору предупреждать о недостающих случаях, поэтому вы не забудете добавить его при добавлении значения перечисления.
На самом деле, у вас нет вопросов (сделайте это так) –
Хм, подумал, что его спросили о гарантиях и быстрее, хотя в середине –
@ DieterLücking возникает вопрос: «Я полагаюсь на то, что не гарантируется ? Может ли это сбой в каком-то случае? »Возможно, вы потеряли его, потому что я добавил текст ниже, объясняющий мотивацию для запроса. – ugoren