【发布时间】:2016-08-03 15:54:19
【问题描述】:
我的问题似乎有点类似于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)
【问题讨论】:
-
您是否有特定的理由在 c++11 后代码中使用
NULL而不是nullptr?此外,gcc 4.4.7 非常旧了,我建议你升级你的编译器,因为该代码在现代编译器上完美运行:coliru.stacked-crooked.com/a/a01d03ae16e6c3bf -
这可能是一个错误。 FWIW 如果你使用 C++11,你应该使用
nullptr。 -
我承认我对
nullptr一无所知。该代码最初不是为 C++11 编写的,但我已经更改了它的另一部分以包含一个需要 C++11 的库。 -
虽然需要gcc 4.6.0+ stackoverflow.com/questions/3756473/…
-
@Fatih BAKIR,我在使用较新的 gcc 版本时遇到了此代码的其他问题。我不是作者。