Ich versuche den Standardwert zu ermitteln, auf den globale Enums mit starkem Typ initialisiert werden. Der folgende Code kompiliert natürlich nicht.
%Vor%Was ist 'k' initialisiert?
k
hat eine statische Speicherdauer und statische Objekte sind null initialisiert, wir können dies unter Entwurf C ++ Standard Abschnitt 3.6.2
Initialisierung von nicht lokalen Variablen Absatz 2 :
Variablen mit statischer Speicherdauer (3.7.1) oder Threadspeicher Dauer (3.7.2) muss vor jedem anderen auf Null initialisiert werden (8.5) Initialisierung findet statt. [...]
für Skalartypen, das bedeutet Initialisierung auf Null, was der Abschnitt 8.5
paragraph 6 ist, der besagt:
Um ein Objekt oder eine Referenz des Typs T auf Null zu initialisieren, bedeutet:
und enthält das folgende Aufzählungszeichen:
Wenn T ein Skalartyp (3.9) ist, wird das Objekt auf den Wert initialisiert erhalten durch Umwandlung des ganzzahligen Literals 0 (null) in T; 105
Wir wissen, dass eine Enumeration ein Skalar-Typ aus Abschnitt 3.9
Typen Absatz 9 ist, der besagt:
Arithmetische Typen (3.9.1), Aufzählungstypen, Zeigertypen, Zeiger auf member types (3.9.2), std :: nullptr_t und cv-qualifizierte Versionen von Diese Typen (3.9.3) werden zusammen als Skalartypen bezeichnet. [...]
zero
ist ein gültiger Wert, da der zugrunde liegende Typ seinen Wert enthalten kann und Abschnitt 7.2
Aufzählungsdeklarationen Absatz 8 besagt, dass eine Aufzählung einen Wert nicht annehmen kann definiert durch seine Enumeratoren:
[...] Es ist möglich, eine Aufzählung zu definieren, die keine Werte hat definiert durch einen seiner Enumeratoren. [...]
Es ist Null initialisiert. Beachten Sie, dass der zugrunde liegende Typ dieser Aufzählung int
(standardmäßig) ist und 0 ein gültiger Enumerator ist, obwohl er nicht explizit in einer Aufzählungsdefinition der Aufzählung verwendet wird.
Nur du musst schreiben
%Vor%Wenn Sie C # verwenden möchten, dann kann implizit eine Null in eine Aufzählung eines beliebigen Typs konvertiert werden:.
Tags und Links c++ initialization enums