Use C++ Global Constants with Caution
What are the ramifications of C++ global constants?
Item 2 of the Effecitve C++ recommends against #define
s.
This is very good advice in general; however…
The execution order of static initializers is undefined; see static
initialization order fiasco.
A ramification in program start-up time is discussed in this thread of Chromium development–even seemingly innocent constant definitions may affect the start-up time. Consider this snippet:
In this case, compiler still needs to generate static initializers for a
because
the value of b
is unknown at compile time.
Should we consider banning global constants entirely?