Integer constant expressions

An integer compile-time constant is a value that is determined during compilation and cannot be changed at run time. An integer compile-time constant expression is an expression that is composed of constants and evaluated to a constant.

An integer constant expression is an expression that is composed of only the following:
  • literals
  • enumerators
  • const variables initialized with compile-time constant expressions or constexpr expressions
  • static const data members initialized with compile-time constant expressions or constexpr expressions
  • casts to integral types
  • sizeof expressions, where the operand is not a variable length array

The sizeof operator applied to a variable length array type is evaluated at runtime, and therefore is not a constant expression.

You must use an integer constant expression in the following situations:
  • In the subscript declarator as the description of an array bound.
  • After the keyword case in a switch statement.
  • In an enumerator, as the numeric value of an enumeration constant.
  • In a bit-field width specifier.
  • In the preprocessor #if statement. (Enumeration constants, address constants, and sizeof cannot be specified in a preprocessor #if statement.)

Note: The C++11 standard generalizes the concept of constant expressions. For more information, see Generalized constant expressions (C++11)

Related information