gcc 4.7.2でコンパイルするために既存のコードを移植していて、nullptrで奇妙な問題が発生しました。私は簡単なテストケースにそれを煮詰めるために管理している:gcc nullptrの問題
#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);
}
は-std = C++ 0xの本とG ++ます。test.cpp -oテストをコンパイルします。
私は期待していた出力は "私はここ1"ですが、 "Original value"を得て、SetMarkerが決して呼び出されないことを示します。
Test2またはTest3のいずれかを呼び出すと、予想される出力が得られます。
私が使用しているコードは、Test3で見られるパターンを元々はNULLの前にキャストなしで使用していますが、intからchar *への無効な変換でエラーが発生したため、NULLptrをすべてNULLに変更しました。残念ながら、それは正しく動作しません。
私はおそらくTest2でパターンを使用するように変更する必要がありますが(私はとにかくそれが好きです)、これはコンパイラのバグか、何か不足しているのかどうか不思議です。
g ++の古いバージョンのバグのようです。 4.8.0は正しい出力を与える。 – ecatmur