Как "()" конвертировать операторы в выражения в C++?
У меня есть следующий код:
int main() {
int i=0;
int j=({int k=3;++i;})+1; // this line
return 0;
}
Он компилируется и запускается. Если я удалю ()
из "этой строки", то он не скомпилируется.
Мне просто интересно, какое синтаксическое правило применяется здесь.
{}
Содержит 2 оператора, а последний оператор указывает значение "return" этого кодового блока. Тогда зачем нужна дополнительная ()
пара, чтобы использовать это возвращаемое значение?
Ответы
Ответ 1
Это выражение выражения, и это расширение, специфичное для GCC.
Из ссылки:
Составной оператор, заключенный в круглые скобки, может отображаться как выражение в GNU C. Это позволяет использовать в выражении циклы, переключатели и локальные переменные.
Составной оператор представляет собой замкнутый блок операторов.