我正在调用一个具有一些可选参数的服务。
我将可选参数设置为NULL
。
但是,当我在服务端检查日志时,作为NULL
传递的参数具有0数值。
知道为什么会发生这种情况以及任何阻止这种情况的方法吗?
答案 0 :(得分:1)
这是因为NULL
通常设置为0
(在某些系统上可能是0L
)。如果您正在使用C ++ 11/14,请改用nullptr
。
答案 1 :(得分:1)
NULL
定义为0.它代表空指针。
由于它是预处理程序定义,因此运行时无法访问原始令牌。
(当前的C ++标准改为nullptr
。如果使用它,只是可能会被发送到运行时,具体取决于调试器的功能。作为一个重要的最后评论,请注意,这些都不意味着实际的地址为零,它只是空指针选择采用的值。)
答案 2 :(得分:0)
我不相信有任何方法可以通过C ++标准" null值" (0
,NULL
或nullptr
)与函数相互区分。它将以任何方式输出为零。换句话说,NULL
在C ++标准中被定义为0
,而0
和nullptr
在值方面可以互换 - 只有{{1}的差异只能分配给指针的东西。
我编写了此代码,它为第一行输出nullptr
,为第二行输出p=0 q=0
和p = 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
,而不是0
或NULL
)