2

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

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

4

2 回答 2

1

来自GCC 4.7 发行说明

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

来自GCC 项目页面中的 C++11

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


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

于 2016-04-28T17:06:28.343 回答
0

GCC 4.6 不支持所有 c++11 特性:

GCC 为即将到来的 ISO C++ 标准 C++0x 提供实验性支持。可以使用 -std=c++0x 启用此支持。

我建议你升级到最新的 GCC 版本,并使用 flag-std=c++11甚至编译-std=c++14

于 2016-04-28T17:56:10.483 回答