C ++:NULL更改为0

时间:2014-10-13 07:53:02

标签: c++ null

我正在调用一个具有一些可选参数的服务。

我将可选参数设置为NULL。 但是,当我在服务端检查日志时,作为NULL传递的参数具有0数值。

知道为什么会发生这种情况以及任何阻止这种情况的方法吗?

3 个答案:

答案 0 :(得分:1)

这是因为NULL通常设置为0(在某些系统上可能是0L)。如果您正在使用C ++ 11/14,请改用nullptr

答案 1 :(得分:1)

NULL 定义为0.它代表空指针。

由于它是预处理程序定义,因此运行时无法访问原始令牌。

(当前的C ++标准改为nullptr。如果使用它,只是可能会被发送到运行时,具体取决于调试器的功能。作为一个重要的最后评论,请注意,这些都不意味着实际的地址为零,它只是空指针选择采用的值。)

答案 2 :(得分:0)

我不相信有任何方法可以通过C ++标准" null值" (0NULLnullptr)与函数相互区分。它将以任何方式输出为零。换句话说,NULL在C ++标准中被定义为0,而0nullptr在值方面可以互换 - 只有{{1}的差异只能分配给指针的东西。

我编写了此代码,它为第一行输出nullptr,为第二行输出p=0 q=0p = zero

q = zero

如果您愿意,您当然可以为#include <cstddef> #include <iostream> using namespace std; int main() { int *p = nullptr; int *q = NULL; cout << "p=" << p << " q=" << q << endl; if (q == 0) { cout << "q = zero" << endl; } if (p == 0) { cout << "p = zero" << endl; } } 编写自己的翻译,以打印0。类似的东西:

NULL

但是这有点单调乏味,所以我会接受 if (p) cout << p; else cout << "NULL"; NULL是一回事。

(在我写的代码中,我只使用0,而不是0NULL