C++ : NULL changing to 0
C++ : NULL changing to 0
我正在调用一个具有一些可选参数的服务。
我正在将可选参数设置为NULL
。但是当我在服务端检查日志时,作为NULL
传递的参数有0个数值。
知道为什么会发生这种情况吗?有什么方法可以防止这种情况发生吗?
这是因为NULL
通常设置为0
(在某些系统上可能是0L
)。如果您使用的是C++11/14,请改用nullptr
。
NULL
被定义为为0。它代表一个空指针。
由于它是一个预处理器定义,运行时将无法访问原始令牌。
(当前的C++标准改为nullptr
。如果使用它,可能会被发送到运行时,这取决于调试器的功能。最后要注意的是,所有这些都不意味着实际的地址为零,这只是空指针选择取的值。)
我不认为有任何方法可以将C++标准的"空值"(0
、NULL
或nullptr
)传递给函数并将它们区分开来。无论哪种方式,它都将输出为零。换句话说,在C++标准中,NULL
被定义为0
,而0
和nullptr
在值方面是可互换的,只是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
或nullptr
)
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- "no matching function for call to 'Vector::Vector'"错误
- vector<vector<double>> to mxArray using memcpy
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 当覆盖存在时调用基本虚拟"binded to object"函数
- OpenGL VBO Indexing ( How to compute Index Array)
- 为什么我会" void value not ignored as it ought to be"?
- C++ : NULL changing to 0