【发布时间】:2017-09-12 03:06:41
【问题描述】:
AFAIK {} 定义了一个新范围,那么它定义了什么?
({});
编译器很好地编译了这个程序:
#include <iostream>
#include <string>
int main()
{
std::string name;
std::cout << "What is your name? ";
{
({});
}
getline (std::cin, name);
std::cout << "Hello, " << name << "!\n";
}
当我用(); 替换({}); 时,编译器无法编译程序。
为什么({}); 运行良好,而(); 却不行?
我已经在 cpp.sh 上测试过这个程序。它编译得很好。
【问题讨论】:
-
对我来说看起来像是一个编译器扩展。带有
-pednatic-errors的 GCC 表示error: ISO C++ forbids braced-groups within expressions [-Wpedantic]。 -
@HolyBlackCat 我已经在cpp.sh 上测试了该程序。它编译得很好
-
GCC 默认启用了一些非标准扩展。
-pedantic-errors禁用它们。-pedantic(或-Wpedantic)使 GCC 在使用时生成警告。 Cpp.sh 有一个复选框来启用第二个。 -
具体来说,它是 GCC 中的“语句表达式”扩展——你可以谷歌一下。
-
“AFAIK {} 定义了一个新的范围”这是一个错误的陈述,至少有三种不同的上下文使用了花括号