Are numeric constant makros like
M_PI
known from the C-librarymath.h
part of the C++ standard?
I cannot find them in my reference.What is the best way to define custom constants?
Is aconstants.hpp
withstatic constexpr int foo = 7;
with a special namespace a good solution?If the makros from question 1 do exist, should I prefer them for readability or define my own constants (like in 2 or in a better way) for type safety?
-
1stackoverflow.com/q/1727881/1147772 Might help– DraxCommented Apr 29, 2014 at 15:10
Add a comment
|
3 Answers
You could use boost -
#include <boost/math/constants/constants.hpp>
using namespace boost::math::constants;
double circumference(double radius)
{
return radius * 2 * pi<double>();
}
see the documentation
Neither the C Standard nor the C++ Standard defines constant M_PI
.
There is no sense to use keyword static in a constant definition because by default constants have internal linkage.
Before defining a constant you should look through the POSIX standard.
M_PI
is not standard.I think this is more of a preference. I've seen the following methods:
#define PI 3.1415 const double PI = 3.1415; const double kPi = 3.1415;
Again, I think its a preference or it could depend on what you are actually doing. Also try this:
#define _USE_MATH_DEFINES #include <math.h>