C++ 中的 ({}) 叫什么?

Hes*_*her 21 c++ gcc-statement-expression

我刚刚读了这样的代码:

auto value = ({
  auto it = container.find(key);
  it != container.end() ? it->second : default_value;
});
Run Code Online (Sandbox Code Playgroud)

这个叫什么({})?我想我以前从未见过这个。

Jar*_*d42 29

它是 gcc 扩展,所以不是标准 C++,

它是陈述式表达

从 C++11 开始,大多数情况下您可以将立即调用函数表达式 (IIFE)与 lambda结合使用:

auto value = [&](){
  auto it = container.find(key);
  return it != container.end() ? it->second : default_value;
}();
Run Code Online (Sandbox Code Playgroud)

  • 它仍然与 lambda 不同,因为语句表达式中的 return 从封闭函数返回,而不是从语句表达式返回。 (5认同)

sup*_*cat 11

甚至在 C89 发布之前,gcc 的作者就发明了一种称为“语句表达式”的扩展,它本来是标准语言的有用部分。它采用最后一个语句是表达式的复合语句,并执行其中的所有内容,然后将最后一个表达式的值视为整个语句表达式的值。

虽然其他一些编译器有支持此类 gcc 扩展的选项,但标准拒绝识别未广泛使用的功能,再加上程序员不愿使用标准未识别的功能,造成了长达数十年的“鸡”和鸡蛋”的问题。