A scalar object declared with theconstexpr storage-class specifier is aconstant. It must be fully and explicitly initialized according to the static initialization rules. It still has linkage appropriate to its declaration and it exists at runtime to have its address taken; it simply cannot be modified at runtime in any way, i.e., the compiler can use its knowledge of the object’s fixed value in any otherconstant expression.
Additionally, the constant expression that is used for the initializer of such a constant is checked at compile time.
An initializer of floating-point type must be evaluated with the translation-time floating-point environment.
There are some restrictions on the type of an object that can be declared withconstexpr. Namely, the following constructs are not allowed to beconstexpr:
volatile types,restrict pointers.Contents |
#include <fenv.h>#include <stdio.h> int main(void){ constexprfloat f=23.0f; constexprfloat g=33.0f;fesetround(FE_TOWARDZERO); constexprfloat h= f/ g;// is not affected by fesetround() aboveprintf("%f\n", h);}
Output:
0.696969
C++ documentation for constexpr type specifier |