我有一个声明这个公共方法的类:
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
答案 0 :(得分:1)
G ++现在接受
-std=c++11
,-std=gnu++11
和-Wc++11-compat
选项,它们相当于-std=c++0x
,-std=gnu++0x
和-Wc++0x-compat
,分别
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
进行编译