Mentre è possibile scrivere codice come questo, può essere un po 'strano. Un caso d'uso un po 'più realistico sarebbe se si dispone di una struct T
come segue:
struct T {
bool check() const;
void fix();
};
Ora si vuole scorrere tutto nel struct ed eseguire verificare su di esso, e quindi chiamare risolvere se il controllo restituisce false. Il modo più semplice per farlo sarebbe
for (list<T>::iterator it = mylist.begin(); it < mylist.end(); ++it)
if (!it->check())
it->fix();
Facciamo finta di voler scriverlo nel modo più breve possibile. fix()
restituire vuoto significa che non puoi metterlo nelle condizioni. Tuttavia, utilizzando l'operatore virgola è possibile aggirare il problema:
for (auto it = mylist.begin(); it != mylist.end() && (it->check() || (it->fix(), true)); ++it);
io non lo uso senza un particolarmente buona ragione, ma permette di chiamare qualsiasi funzione di una condizione, che può essere conveniente.
fonte
2011-11-16 11:35:17
Si chiama operatore virgola: http://www.cplusplus.com/doc/tutorial/operators/. –
Questa dovrebbe essere una risposta, non un commento. – Mysticial
Naturalmente, l'esempio qui è C++, non C. :-) – ibid