2017-04-16 78 views
6

AFAIK {}定义了一个新的范围,那么这个定义是什么?什么是({});意味着在C++?

({}); 

的编译器编译该程序以及:

#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上的程序。它编译好。

+6

看起来像一个编译器扩展给我。带有'-pednatic-errors'的GCC表示错误:ISO C++禁止在表达式中使用支撑组[-Wpedantic]'。 – HolyBlackCat

+0

@HolyBlackCat我已经在http://cpp.sh/上测试了这个程序。它编译得很好 –

+2

GCC默认启用了一些非标准扩展。 '-pedantic-errors'禁用它们。 '-pedantic'(或'-Wpedantic')使GCC在使用时会产生警告。 Cpp.sh有一个复选框来启用第二个。 – HolyBlackCat

回答

8

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

见现场演示hereg++

编译时,见现场演示herevc++编译时。

+0

因此,VC在标准方面比GCC更符合标准。那么,这是第一个。 –

+4

@GillBates:为什么是第一个?有关默认情况下启用的GCC编译器扩展的更常见示例,请参阅可变长度数组。不幸的是,GCC和VC都需要明确地被告知符合ISO标准(或者尽可能符合标准)。你不能只运行'g ++ program.cpp'或'cl.exe program.cpp',并期望编译器正常工作。 –

+0

@Christian - 至少对于微软来说,默认设置一直是*“编译尽可能多的代码,所以客户不会致电产品支持”*。成本效益分析。 :-) –