Do Ideone und Codepad wirklich unterstützen C nicht ++ 03?
-
29-09-2019 - |
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?
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