我的问题似乎有点类似于 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: error: invalid conversion from \u2018long int\u2019 to \u2018Object*
如果我省略 -std=c++0x
,它会编译。另外,如果我使用较新版本的 gcc,则编译没问题。代码有什么问题吗?人们应该期望 gcc 版本有这样的差异吗?
后来的编辑:我也可以返回 pair_t((Object*)NULL, 2)
最佳答案
我相信您的问题的答案就在这里:
C++ can't initialize a pointer in a pair to NULL
NULL 由 gcc 表示为 long,如果没有显式转换,它不能转换为 Object* 类型。
关于c++ - 返回 NULL 指针,从 'long int' 到 'Object*' 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38748394/