C++17 Update:
static constexpr
variables are implicitly inline
so there\'s no external definition necessary.
Original qu
Perhaps no advantage for your usage because you're just using simple fixed integer values.
But, [AFAIK] constexpr
can be more general as it allows initialization from anything that can be evaluated at compile time.
From type_traits
:
/// integral_constant template
struct integral_constant { static constexpr _Tp value = __v; typedef _Tp value_type; typedef integral_constant<_Tp, __v> type; constexpr operator value_type() const { return value; } #if __cplusplus > 201103L #define __cpp_lib_integral_constant_callable 201304 constexpr value_type operator()() const { return value; } #endif };
Thus, constexpr
has usage in metaprogramming.
The following is a bit rough.
If you had a function like:
constexpr unsigned
bitmask(int bitno)
{
return 1u << bitno;
}
You might find a usage such as:
constexpr unsigned BIT_0 = bitmask(0);
constexpr unsigned BIT_1 = bitmask(1);