NULL和nullptr的区别

2023-06-26,

指定 std::nullptr_t 类型的 null 指针常量,该类型可转换为任何原始指针类型。尽管您可以使用关键字 nullptr 而不包含任何标头,但如果您的代码使用类型 std::nullptr_t,则您必须通过包含标头 <cstddef> 来定义该类型。请避免将 NULL 或零 (0) 用作 null 指针常量;nullptr 不仅不易被误用,并且在大多数情况下使用效果更好。例如,给定 func(std::pair<const char *, double>),那么调用 func(std::make_pair(NULL, 3.14)) 会导致编译器错误。宏NULL将扩展为0,以便调用make_pair(0, 3.14) 将返回 std::pair<int, double>,此结果不可转换为 func() 的 std::pair<const char *, double> 参数类型。调用 func(std::make_pair(nullptr, 3.14)) 将会成功编译,因为make_pair(nullptr, 3.14) 返回 pair<std::nullptr_t, double>,此结果可转换为 pair<const char *, double>。

 

class XYCombineRecord: public Node
{
public:
 XYCombineRecord():
  m_imgIndex(0)
  ,m_displayMode(DISPLAY_MODE_NORMAL)
  ,callback(NULL){};   //编译失败
 CREATE_FUNC(XYCombineRecord);
 std::function<void(XYCombineRecord* ,PlayLayer*)> callback;

 

class XYCombineRecord: public Node
{
public:
 XYCombineRecord():
  m_imgIndex(0)
  ,m_displayMode(DISPLAY_MODE_NORMAL)
  ,callback(nullptr){}; //编译成功
 CREATE_FUNC(XYCombineRecord);
 std::function<void(XYCombineRecord* ,PlayLayer*)> callback;

《NULL和nullptr的区别.doc》

下载本文的Word格式文档,以方便收藏与打印。