Constant Expressions
A constant expression is an expression that can be evaluated
at compile time. Constants of integral or enumerated type are required
in several different situations, such as array bounds, enumerator
values, and case
labels. Null pointer
constants are a special case of integral constants.
Integral Constant Expressions
An integral constant expression is an expression that can
be evaluated at compile time, and whose type is integral or an
enumeration. The situations that require integral constant expressions
include array bounds, enumerator values, case
labels, bit-field sizes, static member
initializers, and value template arguments. The compiler must be able
to evaluate the expression at compile time, so you can use only
literals, enumerators, const
objects that have constant initializers, integral or enumerated
template parameters, sizeof
expressions, and constant addresses. The address of a static lvalue
object is a constant address, as is the address of a function. A
string literal, being a static array of characters, is also a constant
address.
An integral static const
data
member can be initialized in the class definition if the initializer
is a constant integral or enumerated expression. The member can then
be used as a constant expression elsewhere in the class definition.
For example:
template<typename T, size_t size> class array { public: static const size_t SIZE = size; ... private: T data[SIZE]; };
See Chapter 6 for more information about static data members. ...
Get C++ In a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.