c ++ 11统一初始化不适用于“g ++ -std = c ++ 0x”

时间:2016-04-28 16:43:12

标签: c++ c++11 g++ clang++ uniform-initialization

我有一个声明这个公共方法的类:

virtual std::vector<float> operator()(const std::vector<float>& = {});

使用统一初始化(这里只是{}),这是c ++ 11的一个特性。使用clang++ -std=c++11进行编译时,这不会给我带来任何问题。但是当我使用g++ -std=c++0x时,我得到了这个:

error: expected primary-expression before '{' token

假设-std=c++0x选项不是带给我c ++ 11支持吗?

在使用标准c ++声明方法时,编译器不会给我任何错误:

virtual std::vector<float> operator()(const std::vector<float>& = std::vector<float>());

我在Ubuntu 12.04上使用g ++ 4.6

2 个答案:

答案 0 :(得分:1)

来自GCC 4.7 release notes

  

G ++现在接受-std=c++11-std=gnu++11-Wc++11-compat选项,它们相当于-std=c++0x-std=gnu++0x-Wc++0x-compat,分别

来自C++11 in GCC project page

  

GCC 4.8.1 是2011 C ++标准的第一个功能完整实现,以前称为C ++ 0x。

坏消息,您需要升级编译器以获得有效的C ++ 11支持。

答案 1 :(得分:0)

GCC 4.6并不支持所有c ++ 11功能:

  

GCC为即将推出的ISO C ++标准C ++ 0x提供实验支持。可以使用-std = c ++ 0x。

启用此支持

我建议您升级到最新的GCC版本,并使用标记-std=c++11甚至-std=c++14进行编译