2 Stimmen

Unterstützen Ideone und Codepad wirklich nicht C++03?

Meine Frage bezieht sich auf Prasoon's Frage zu nicht-POD-Typen und Wertinitialisierung.

Ich habe den folgenden Code auf Online-Compilern wie Ideone und Codepad ausprobiert, aber die ausführbaren Dateien haben auf beiden Websites Laufzeitfehler erzeugt.

#include 
#include 

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

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

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

Ideone-Ausgabe hier
Codepad-Ausgabe hier

Bedeutet das, dass keiner von ihnen die C++03-Wertinitialisierungsfunktion unterstützt?

4voto

James McNellis Punkte 337231

Bedeutet das, dass keiner von ihnen die Funktion zur C++03-Initialisierung von Werten unterstützt?

Ja.

Vor Version 4.4 unterstützte GCC die Wertinitialisierung nicht vollständig (der Boost GCC-Kompatibilitätsheader erklärt dies und enthält Links zu den relevanten GCC-Defektberichten; siehe Zeile 77).

Wenn Ihr Code portabel sein muss, sollten Sie darauf sehr vorsichtig sein, sich auf die Wertinitialisierung zu verlassen; GCC unterstützte sie erst kürzlich vollständig und Visual C++ unterstützt sie auch in seiner neuesten Version, Visual C++ 2010, nicht vollständig.

0voto

Chubsdad Punkte 23861

Die Deklaration

InStruct i; 

ruft keine Wertinitialisierung auf

$8.5.3/10 - "Ein Objekt, dessen Initialisierer ein leeres Set von Klammern ist, d.h., (), wird wertinitialisiert."

Wenn Sie wertinitialisieren möchten, müssten Sie einen Ausdruck wie

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

0voto

kuszi Punkte 2059

Probieren Sie es jetzt aus! - Ideone unterstützt GCC-4.5.1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X