Круглые скобки сразу после условия if

Встретил такой код (выводит целое число в двоичном виде):

void f(const int n) 
{ 
    if (n) (f(n >> 1), std::cout << (n & 1)); 
}

И я абсолютно не понимаю как это работает. Нигде не смог найти информацию. Может кто-нибудь пояснить?


Ответы (2 шт):

Автор решения: KoVadim

После if(условие) может быть оператор (statement). Если их несколько, то нужно взять в фигурные скобки.

Посмотрим на такой код

if (n > 0) f(n);

в этом случае отсутствие скобок не должно смущать.

Взятие в круглые скобки - это просто выражение (в данном случае там два выражения, но это такое дело).

То есть, это все можно переписать вот так

void f(const int n) 
{ 
    if (n != 0) { f(n >> 1); std::cout << (n & 1)}; 
}

А исходный код лучше в приличном обществе не писать.

→ Ссылка
Автор решения: Qwertiy

Эти скобки ничего не делают - без них код продолжит работать как и раньше.

Возможно, они нужны, чтобы линтер не выдавал предупреждение на оператор запятая (для eslint есть такое правило, что у си - не знаю).

Оператор запятая последовательно вычисляет левую и правую части, после чего возвращает значение правой. Конкретно в данном коде причин пихать несколько действий в один statement я не вижу, но в некоторых случаях может оказаться, что разница есть.

→ Ссылка