Ich portiere bestehenden Code, um unter gcc 4.7.2 zu kompilieren und habe ein seltsames Problem mit nullptr. Ich habe es geschafft, es zu kochen bis zu einem einfachen Testfall:gcc nullptr Ausgabe
#include <stdio.h>
const char* g_marker = "Original value";
void SetMarker(const char* s)
{
g_marker = s;
}
char* Test1()
{
return SetMarker("I was here 1"), nullptr;
}
char* Test2()
{
SetMarker("I was here 2");
return nullptr;
}
char* Test3()
{
return SetMarker("I was here 3"), (char*)NULL;
}
int main()
{
char* returnValue = Test1();
printf("%s\n", g_marker);
}
Kompilieren Sie dieses mit g ++ test.cpp -o Test -std = C++ 0x.
Die Ausgabe, die ich erwarten würde, ist "Ich war hier 1", aber ich bekomme "Originalwert", was bedeutet, dass SetMarker nie aufgerufen wird.
Der Aufruf von Test2 oder Test3 ergibt die erwartete Ausgabe.
Der Code, mit dem ich arbeite, verwendet das in Test3 gesehene Muster - ursprünglich ohne die Umwandlung vor NULL - was einen Fehler bei der ungültigen Konvertierung von int in char * ergab, also änderte ich all diese NULL in nullptr. Leider verhält sich das einfach nicht richtig.
Ich bin wahrscheinlich gezwungen, den Code zu ändern, um das Muster in Test2 zu verwenden (was ich sowieso bevorzuge), aber ich bin neugierig zu wissen, ob dies ein Fehler im Compiler ist, oder wenn ich etwas verpasse.
Sieht aus wie ein Fehler in älteren Versionen von g ++; 4.8.0 gibt die korrekte Ausgabe. – ecatmur