Как "()" конвертировать операторы в выражения в C++?

У меня есть следующий код:

int main() {
    int i=0;
    int j=({int k=3;++i;})+1; // this line
    return 0;
}

Он компилируется и запускается. Если я удалю () из "этой строки", то он не скомпилируется.

Мне просто интересно, какое синтаксическое правило применяется здесь.

{} Содержит 2 оператора, а последний оператор указывает значение "return" этого кодового блока. Тогда зачем нужна дополнительная () пара, чтобы использовать это возвращаемое значение?

Ответ 1

Это выражение выражения, и это расширение, специфичное для GCC.


Из ссылки:

Составной оператор, заключенный в круглые скобки, может отображаться как выражение в GNU C. Это позволяет использовать в выражении циклы, переключатели и локальные переменные.

Составной оператор представляет собой замкнутый блок операторов.