我需要使用两个编译器版本编译代码:
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
)
答案 0 :(得分:3)
const
对于变量来说是多余的。只需constexpr
,就像这样:
static constexpr RealType Pi = 3.14;
在C ++ 14中,你甚至可以说,
template <typename T> constexpr Pi = T(3.14);
并将其用作Pi<double>
等。