На более широкий ответ. Оператор запятой (не перегруженный) разрешается как, выполняет первую часть и возвращает вторую часть.
Так что если у вас есть (foo (), bar ()), обе функции будут выполнены, но значение выражения оценивается как bar () (и тип выражения также).
Хотя я не буду говорить, что для этого есть справедливые способы использования, обычно считается, что код трудно читать. Главным образом потому, что не многие языки разделяют такие конструкции. Так что, как личное правило, я избегаю этого, если я не добавляю код в ранее существующее выражение и не хочу полностью изменять его формат.
Пример: у меня есть макрос (не обсуждаю, следует ли вам использовать макросы или нет, иногда это даже не вы написали)
FIND_SOMETHING (X) (x> 2)? find_fruits (x): find_houses (x)
И я обычно использую его в назначениях, таких как my_possession = FIND_SOMETHING (34);
Теперь я хочу добавить в него журнал для целей отладки, но я не могу изменить функции поиска. Я мог бы сделать:
FIND_SOMETHING (X) (x> 2)? (LOG («в поисках фруктов»), find_fruits (x)) :( LOG («в поисках домов»), find_houses (x))