C++ 用constexpr替换M_PI等数学常数

C++ 用constexpr替换M_PI等数学常数,c++,c++11,constants,constexpr,cmath,C++,C++11,Constants,Constexpr,Cmath,是否有任何C++11constepr常量可以用来代替中的常量宏,例如M_PI和friends之类的常量?或缺少这一点,任何全局代码< const 值,这些值在运行时提供这些常量(< p>),没有在C++标准库中定义的预定义的conExpR或全局const常量。但您可以自己定义它们,例如: namespace MathConstants { const double E = 2.71828182845904523536; const double LOG2E

是否有任何C++11
constepr
常量可以用来代替
中的常量宏,例如
M_PI
和friends之类的常量?或缺少这一点,任何全局代码< const <代码>值,这些值在运行时提供这些常量(

< p>),没有在C++标准库中定义的预定义的conExpR或全局const常量。但您可以自己定义它们,例如:

namespace MathConstants {
    const double E =            2.71828182845904523536;
    const double LOG2E =        1.44269504088896340736;
    const double LOG10E =       0.434294481903251827651;
    const double LN2 =          0.693147180559945309417;
    const double LN10 =         2.30258509299404568402;
    const double PI =           3.14159265358979323846;
    const double PI_2 =         1.57079632679489661923;
    const double PI_4 =         0.785398163397448309616;
    const double PI_1_PI =      0.318309886183790671538;
    const double PI_2_PI =      0.636619772367581343076;
    const double PI_2_SQRTPI =  1.12837916709551257390;
    const double SQRT2 =        1.41421356237309504880;
    const double SQRT1_2 =      0.707106781186547524401;
};

或者使用boost math常量模板,一些文档(还没有使用过它)。

constexpr有什么好处?宏是常量表达式,不是吗?@Pubby:
constexpr
vs.macro:主要的好处是干净的名称空间处理,这样的问题可能不太可能发生
constepr
与simple
const
:可以确保在编译时使用它们,例如计算模板参数。boost指针+1。似乎在最近的版本中,这些东西已经从内部子包中移出,所以它的API应该相当稳定。看见