Почему это работает: последний оператор С++ в результате выражения
Я нашел странные макросы в реализации драйвера, которые я не могу объяснить себе.
Упрощенный пример:
cout << ({int i=0; while(i<10) {++i;} i;}) << endl;
Он выведет 10.
Но почему это выражение вообще становится rvalue? Кажется, он работает в C и на С++.
Может кто-нибудь объяснить мне? Указывать на ключевые слова и ссылаться будет отлично.
Ответы
Ответ 1
Это расширение GCC :
Составной оператор, заключенный в круглые скобки, может отображаться как выражение в GNU C.
Последнее, что содержится в составной инструкции, должно быть выражением затем точка с запятой; значение этого подвыражения служит значение всей конструкции.