Chociaż można napisać taki kod, może to być nieco dziwne. Nieco bardziej realistyczny USECASE byłoby jeśli masz struct T
następująco:
struct T {
bool check() const;
void fix();
};
Teraz chcesz iterację wszystko w struktury i uruchomić sprawdzić na nim, a następnie zadzwonić naprawić jeśli check zwraca false. Prostym sposobem wykonania tej czynności będzie:
for (list<T>::iterator it = mylist.begin(); it < mylist.end(); ++it)
if (!it->check())
it->fix();
Udawaj, że chcesz napisać tak krótko, jak to możliwe. fix()
powracająca próżnia oznacza, że nie możesz po prostu umieścić jej w stanie. Jednak za pomocą operatora przecinek można obejść ten problem:
for (auto it = mylist.begin(); it != mylist.end() && (it->check() || (it->fix(), true)); ++it);
nie będę go używać bez szczególnie dobry powód, ale to nie pozwalają wywołać dowolną funkcję z powodu stanu, który może być wygodne.
Nazywa się to operatorem przecinka: http://www.cplusplus.com/doc/tutorial/operators/. –
To powinna być odpowiedź, a nie komentarz. – Mysticial
Oczywiście, przykład tutaj jest C++, a nie C. :-) – ibid