【问题标题】:How to use NULL in a .cpp file?如何在 .cpp 文件中使用 NULL?
【发布时间】:2015-02-10 21:38:35
【问题描述】:

我现在正在研究唯一的实例(在 c++ 中),我在我的 .cpp 文件中尝试了以下代码。

#include "OnlyInstance.h"

OnlyInstance* OnlyInstance::instance = NULL;
..........

但编译器告诉我“错误 C2065:'NULL':未声明的标识符”。 这就是说,我应该

#include <stdio.h> 

在它面前?但我还在主文件中包含了 stdio.h。所以编译的时候会多次包含stdio.h,对吧?如何正确使用 NULL?

另一个问题是,我知道我可以使用 0 代替 NULL,但是在 c++ 中更推荐哪种方式?

【问题讨论】:

  • 顺便说一句,当您使用NULL 初始化静态指针时,您也可以简单地省略初始化程序。

标签: c++ null-pointer


【解决方案1】:

NULL 定义在各种标头中,例如&lt;cstddef&gt;

但是,如果您的编译器支持,您应该更喜欢 nullptr 而不是 NULL

多次包含一个标头是没有问题的(如果标头没有严重损坏,标准标头不是)。

【讨论】:

  • 它应该适用于 C++11 及更高版本。
  • 但如果我同时在 OnlyInstance.cpp 和 main.cpp 中执行 #include ,那么在 main.cpp 中 #include 'OnlyInstance.h'。编译器会做什么? stdio.h 将被包含两次?谢谢!
【解决方案2】:

NULL 只是一个值为 0 的定义。它完全一样。

但如果您可以访问 C++11,我建议您使用 nullptr。

【讨论】:

  • 其实也可以是别的东西。这是喜欢nullptr的原因之一。
  • 从技术上讲,它是一个与指针大小相同的 0,因此它可能是 0 或 0L 或 0LL,具体取决于与指针匹配的整数类型。否则,printf("%p", NULL); 之类的东西会出错。
  • @MatsPetersson:有时隐藏错误会很好。但不能保证。
  • 好吧,它可能不适用于所有编译器,但根据我的经验,它肯定比我在实现 printf 时必须处理的一些测试代码的 printf("%p", 0); 工作得更好——花了一段时间找出问题所在,因为它比此评论中的代码隐藏得更好......
猜你喜欢
  • 1970-01-01
  • 2020-07-06
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多