int a = int (); Was passiert in C ++ 98?

8

Bitte lesen Sie die Frage vollständig durch, bevor Sie sie als doppelt markieren. Die Aussage wie

int i=int();

Die meisten Programmierer werden sagen, dass hier Wert Initialisierung ist & amp; Ich werde Wert initialisiert werden. (0 als Ausgabe). Aber es druckt auch 0 als Ausgabe auf C ++ 98 Compiler. Folgendes Programm, das ich auf C ++ 98 Implementierung getestet habe und gibt mir 0 als Ausgabe.

%Vor%

Sagen Sie nicht, dass i ein Wert ist, der in obigem C ++ 98-Programm initialisiert wurde, weil die Wert-Initialisierung in C ++ 03 eingeführt wurde. So, wie ich hier initialisiert werde? Ist es wirklich Konstruktor Anruf? int () sieht wie Konstruktoraufruf aus. Primitive Typen haben auch Standardkonstruktoren in C ++, wie Bjarne stroustrup in seinem Buch C ++ - Programmiersprache & amp; TC ++ PL. Die C ++ Programmiersprache Bjarne stroustrup:

  

10.4.2 Eingebaute Typen haben auch Standardkonstruktoren

lesen Sie auch Abschnitt 6.2.8 desselben Buches.

Die folgenden Links sagen auch, dass eingebaute Typen Standardkonstruktoren in C ++ haben.

1) Ссылка

2) Ссылка

Also kann ich wirklich sagen, dass es sich um einen Konstruktoraufruf vom Integer-Typ handelt?

    
Destructor 02.06.2015, 18:11
quelle

1 Antwort

9
  

5.2.3 Explizite Typumwandlung (funktionale Schreibweise)

     

2 Der Ausdruck T() , wobei T ein einfacher-Typ-Spezifizierer (7.1.5.2) für einen nicht-Array-vollständigen Objekttyp oder den (möglicherweise cv-qualifizierten) void-Typ ist, erzeugt einen rvalue des angegebener Typ, dessen Wert von bestimmt wird   Standard-Initialisierung (8.5; keine Initialisierung für den Fall void() durchgeführt). [...]

     

8.5 Initialisierer

     

5 [...] To default-initialize bedeutet ein Objekt vom Typ T :

     

- Wenn T ein Nicht-POD-Klassentyp ist (Klausel 9), der Standardkonstruktor für    T wird aufgerufen (und die Initialisierung ist fehlerhaft, wenn T keinen zugreifbaren Standardkonstruktor hat);

     

- Wenn T ein Array-Typ ist, wird jedes Element standardmäßig initialisiert;

     

- andernfalls wird der Speicher für das Objekt auf Null initialisiert.

Es gibt kein Problem. int() wurde garantiert vom ersten C ++ Standard bis auf Null ausgewertet. Die Tatsache, dass es sich um eine Standardinitialisierung anstelle einer Wertinitialisierung handelt, ist ein technisches Detail, das für Ihre Frage völlig irrelevant ist.

    
hvd 02.06.2015, 18:20
quelle