我的问题似乎与Conversion from null-integer to pointer in comma list
有些相似这是一个最小的例子
#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:错误:从\ u2018long int \ u2019到\ u2018Object *
的无效转换
如果省略-std=c++0x
,它会编译。另外,如果我使用更新版本的gcc,编译就可以了。代码有什么问题吗?人们应该期待gcc版本的这种差异吗?
稍后编辑:我也可以返回pair_t((Object*)NULL, 2)
答案 0 :(得分:2)
我相信你的问题的答案就在这里:
C++ can't initialize a pointer in a pair to NULL
NULL由gcc表示为long,如果没有显式强制转换,则无法将其转换为Object *类型。