Операторы {} в этом контексте являются «анонимным оператором области видимости» (он же «лексическое вложение», «форма» и другими различными вещами. Они используются, в некотором роде как пространство имен, для ограничения область действия _a и _b внутри фигурных скобок, чтобы они не конфликтовали с другими переменными, которые могут иметься с теми же именами. «auto» переменные, определенные в {фигурных скобках}, будут «уничтожены» после достижения закрывающей фигурной скобки, или для нелокальной передачи, например «return» или «longjmp». Однако вы не можете надежно использовать «goto» для их передачи.
Вы, вероятно, привыкли видеть их только после операторов "if", "do", "while" и "for", но думаете, что это способ, как правило, "объединить" несколько операторов в один "слот, «так же, как вы выполняете несколько операторов в качестве предложения« then »или« else »в выражении« if »(где, оставляя скобки, у вас есть только один оператор« slot »)
Как указал Майк Сеймур, операция ({}) является нестандартным расширением GCC, которое возвращает значение последнего элемента, оцененного в нем. Это очень похоже на общий оператор области видимости, за исключением встроенного возврата в конце.