En caso de duda, utilice Clang:
$ clang++ -Weverything test.cpp
test.cpp:4:5: warning: no previous prototype for function 'foo' [-Wmissing-prototypes]
int foo()
^
test.cpp:6:10: warning: expression result unused [-Wunused-value]
return 1,2,3,4,5,6;
^
test.cpp:6:12: warning: expression result unused [-Wunused-value]
return 1,2,3,4,5,6;
^
test.cpp:6:14: warning: expression result unused [-Wunused-value]
return 1,2,3,4,5,6;
^
test.cpp:6:16: warning: expression result unused [-Wunused-value]
return 1,2,3,4,5,6;
^
test.cpp:6:18: warning: expression result unused [-Wunused-value]
return 1,2,3,4,5,6;
^
6 warnings generated.
Como su nombre indica , -Weverything
activa cada advertencia disponible. De esta manera no tiene que recordar los grupos en los que se encuentran.
En cuanto a las explicaciones: consulte la respuesta de Mysticial sobre el operador de coma y sus efectos de secuencia. Una ocurrencia útil de este operador es:
std::list<Item> list = /**/;
assert(list.size() >= 10);
auto it = list.begin();
for (int i = 0; i < 10; ++i, ++it) {
std::cout << "Item " << i << ": " << *it << "\n";
}
Nota cómo la tercera cláusula del bucle for
utiliza el operador de coma para hacer dos operaciones en una sola sentencia.
Por supuesto, tal sintaxis es en su mayoría anecdótica, por lo que las personas se sorprenden regularmente ...