Frage

Meine Frage ist im Zusammenhang mit Prasoon 's Frage über nicht pOD-Typen und den Wert der Initialisierung.

Ich habe versucht, den folgenden Code auf der Online-Compiler wie Ideone und Codepad aber die ausführbaren Dateien gab Laufzeitfehler auf beiden Seiten.

#include <iostream>
#include <cassert>

struct Struct {
    std::string String;
    int Int;
    bool k;
};

struct InStruct:Struct
{
   InStruct():Struct(){}
};

int main()
{
   InStruct i;
   assert ( i.Int == 0);
   std::cout << "Hello";
}

Ideone Output hier
Codepad Output hier

Heisst das, keiner von ihnen unterstützen C ++ 03-Wert-Initialisierung-Funktion?

War es hilfreich?

Lösung

  

Heisst das, keiner von ihnen unterstützen C ++ 03-Wert-Initialisierung-Funktion?

Ja.

Vor der Version 4.4, hat GCC nicht vollständig Wert Initialisierung unterstützen ( der Boost-GCC-Kompatibilität Header dies erklärt und hat Links zu den entsprechenden GCC Fehlerberichte, siehe Zeile 77)

.

Wenn Ihr Code tragbar sein muss, sollten Sie sehr vorsichtig auf Wert Initialisierung verlassen werden; GCC hat es nicht voll unterstützen, bis vor kurzem und Visual C ++ voll unterstützt es nicht einmal in seiner neuesten Version, Visual C ++ 2010.

Andere Tipps

Die Deklaration

InStruct i; 

nicht invoke Wert Initialisierung

  

8.5.3 $ / 10 - „Ein Objekt, das   Initialisierer ist ein leerer Satz von   Klammern, das heißt, (), wird sein   Wert initialisiert. "

Wenn Sie Wert initialisieren möchten, müssen Sie einen Ausdruck so etwas wie erforderlich

assert(InStruct().Int == 0);

Versuchen Sie es jetzt ! - Ideone unterstützt GCC-4.5.1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top