Non-Integral Static Constants in Classes and Their Compilation Failure
In C , attempting to define a static const member with a non-integral type, such as double, within a class can result in compilation errors. This behavior may seem puzzling, as integral types (e.g., int, unsigned) are permitted in this context.
The reason for this discrepancy lies in the way the compiler handles constants. For integral types, the compiler typically inlines the constant wherever it is used, eliminating the need for a memory location. However, non-integral constants, like doubles, typically require a memory address at runtime.
To ensure that a static const member with a non-integral type is properly defined, it is recommended to declare it in a header file and define it in a separate source file. By doing so, the definition appears in a single translation unit, preventing multiple definitions.
While the compiler may optimize non-integral constants at higher optimization levels, such as -O1 in g , declaring and defining constants separately is still the most portable approach for cross-platform compatibility.
The above is the detailed content of Why Can\'t I Define Non-Integral Static Constants in Classes in C ?. For more information, please follow other related articles on the PHP Chinese website!