I\'m wondering why the integer ii
is initiallized at compile time, but not the float ff
here:
int main() {
const int i = 1;
con
Constant variables of integral types with constant initializers are integral constant expressions (de facto implicitely constexpr
; see expr.const in ISO C++). float
is not an integral type and does not meet the requirements for constant expression without the use of constexpr
. (A similar case is why int
can be but float
cannot be a template parameter.)
In C++ constant integers are treated differently than other constant types. If they are initialized with a compile-time constant expression they can be used in a compile time expression. This was done so that array size could be a const int
instead of #define
d (like you were forced in C):
(Assume no VLA extensions)
const int s = 10;
int a[s]; // OK in C++