什么({}); 用C++表示?

m.r*_*226 6 c++ scope c++11

AFAIK {}定义了一个新的范围,那么它定义了什么?

({});
Run Code Online (Sandbox Code Playgroud)

编译器很好地编译了这个程序:

#include <iostream>
#include <string>

int main()
{
  std::string name;
  std::cout << "What is your name? ";
  {
     ({}); 
  }
  getline (std::cin, name);
  std::cout << "Hello, " << name << "!\n";
}
Run Code Online (Sandbox Code Playgroud)

当我({});();complier 替换时无法编译程序.

为什么({});运作良好,但();不是?

我在cpp.sh上测试了该程序.它汇编很好.

Des*_*tor 8

({});不是标准C++的一部分.正如@HolyBlackCat所说,这是编译器扩展.使用-pedantic-errors禁用编译器扩展.

在编译时看这里的现场演示g++

在编译时看这里的现场演示vc++.

  • @GillBates:为什么它是第一个?有关GCC编译器扩展的更常见示例,请参阅可变长度数组,该扩展默认情况下已启用.遗憾的是,需要明确告知GCC和VC符合ISO标准(或尝试尽可能符合标准).你不能只运行`g ++ program.cpp`或`cl.exe program.cpp`并期望编译器正常运行. (4认同)