In C können Sie dies tun:Static const ohne initializer
static const int a;
int main(){}
Und es scheint in Ordnung zu sein. C99 §6.7.8p10 sagt:
Wenn ein Objekt, das statische Speicherdauer hat, ist ausdrücklich nicht initialisiert ist, dann:
- wenn es arithmetischen Typ hat, wird sie initialisiert (positiv oder unsigned) Null;
ähnlich C++ 14 §3.6.2p2 sagt:
Variables mit statischer Speicherdauer (3.7.1) oder Fadenspeicher Dauer (3.7.2) betragen Null initialisiert (8,5) bevor irgendeine andere Initialisierung stattfindet.
Der Unterschied ist in C++ 14 es einen Initialisierer §8.5p7 benötigt:
Wenn ein Programm für die Standard-Initialisierung eines Objekts ruft eines const qualifizierten Typ
T
,T
wird Sei ein Klassentyp mit einem vom Benutzer bereitgestellten Standardkonstruktor .
Also ich frage, warum ist ein Initializer in C++ erforderlich? Es wird kein Initialisierer benötigt, wenn a
nicht const
ist, also welchen Unterschied macht const
hier, das würde keinen Initialisierer schlecht machen?
C und C++ sind verschiedene Sprachen. –