1

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

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;
   ...
};

如果我使用它构建代码constexprg++ -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) ,代码构建得很好

4

1 回答 1

3

const变量来说是多余的。就像constexpr这样:

static constexpr RealType Pi = 3.14;



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

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

并将其用作Pi<double>等。

于 2013-08-01T10:50:36.273 回答