我的問題無效的轉換似乎有點類似Conversion from null-integer to pointer in comma list返回NULL指針,從「長整型」到「對象*」
下面是一個小例子,
#include <utility>
struct Object {
double foo;
};
std::pair<Object*,int> test_function() {
typedef std::pair<Object*,int> pair_t;
return pair_t(NULL, 2);
}
// test.cc
用GCC 4.4.7,g++ -std=c++0x -c test.cc -o test.o
失敗與
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_pair.h:90: error: invalid conversion from \u2018long int\u2019 to \u2018Object*
如果我省略-std=c++0x
它編譯。另外,如果我使用新版本的gcc,編譯就沒問題。代碼有什麼問題嗎?我們應該期望gcc版本有這種差異嗎?
稍後編輯:我還可以返回pair_t((Object*)NULL, 2)
你有沒有在後C++ 11代碼中使用'NULL'而不是'nullptr'的具體原因?另外,gcc 4.4.7 * * * * * * * * *舊,我建議你升級你的編譯器,因爲該代碼可以在現代編譯器上完美工作:http://coliru.stacked-crooked.com/a/a01d03ae16e6c3bf –
這可能是一個bug。 FWIW如果你使用C++ 11,你應該使用'nullptr'。 – NathanOliver
我承認我對'nullptr'的無知。該代碼最初並不是爲C++ 11編寫的,但我已經將其中的另一部分更改爲包含需要C++ 11的庫。 – bernie