Was sind globale stark typisierte Enums, die standardmäßig in C ++ initialisiert werden?

9

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?

    
aakashbhowmick 27.08.2014, 13:17
quelle

2 Antworten

9

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. [...]

    
Shafik Yaghmour 27.08.2014 13:27
quelle
3

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:.

    
Vlad from Moscow 27.08.2014 13:24
quelle

Tags und Links