C++ : NULL changing to 0

C++ : NULL changing to 0

本文关键字:to changing NULL C++      更新时间:2023-10-16

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

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

知道为什么会发生这种情况吗?有什么方法可以防止这种情况发生吗?

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

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

由于它是一个预处理器定义,运行时将无法访问原始令牌。

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

我不认为有任何方法可以将C++标准的"空值"(0NULLnullptr)传递给函数并将它们区分开来。无论哪种方式,它都将输出为零。换句话说,在C++标准中,NULL被定义为0,而0nullptr在值方面是可互换的,只是nullptr只能分配给指针。

我写了这个代码,它为第一行输出p=0 q=0,为第二行输出p = zeroq = 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"; 

但这有点乏味,所以我只接受NULL0是同一回事。

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