2016-08-03 30 views
0

我的問題無效的轉換似乎有點類似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)

+2

你有沒有在後C++ 11代碼中使用'NULL'而不是'nullptr'的具體原因?另外,gcc 4.4.7 * * * * * * * * *舊,我建議你升級你的編譯器,因爲該代碼可以在現代編譯器上完美工作:http://coliru.stacked-crooked.com/a/a01d03ae16e6c3bf –

+0

這可能是一個bug。 FWIW如果你使用C++ 11,你應該使用'nullptr'。 – NathanOliver

+0

我承認我對'nullptr'的無知。該代碼最初並不是爲C++ 11編寫的,但我已經將其中的另一部分更改爲包含需要C++ 11的庫。 – bernie

回答