GNU版本问题与gnu ++ 0x标准

时间:2013-08-01 10:46:23

标签: c++ c++11 standards gnu

我需要使用两个编译器版本编译代码:

g ++(Ubuntu / Linaro 4.7.3-1ubuntu1)4.7.3

g ++(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3

我在头文件中有一段代码,如下所示:

template <RealType> class Constant {
   ...
   /*constexpr*/ static const RealType Pi = 3.1415926535897932384626433832795028841971693993751;
   ...
};

如果我使用constexpr使用g++ -std=gnu++0x构建代码,则适用于版本4.7.3。但是版本为4.6.3。构建包含头文件的* .cpp文件失败:

error: both ‘const’ and ‘constexpr’ cannot be used here

但是,如果我不使用constexpr版本4.6.3抱怨:

error: ‘constexpr’ needed for in-class initialisation of static data member ‘const double Constant<double>::Pi’

是否有解决方法?

顺便说一句,如果我省略-std=gnu++0x(当然还有constexpr

,代码就可以正常运行

1 个答案:

答案 0 :(得分:3)

const对于变量来说是多余的。只需constexpr,就像这样:

static constexpr RealType Pi = 3.14;



在C ++ 14中,你甚至可以说,

template <typename T> constexpr Pi = T(3.14);

并将其用作Pi<double>等。