C++ 为什么要使用nullptr,而不是NULL和0

  1. 从语义角度来看,0代表int,并不是指针类型,而NULL则是宏,可能是int,也可能是long类型,取决于各个平台的实现。但是nullptr很清楚地表明:这是一个指针。
  2. 如果有2个重载(overload)函数:func(int)和func(A*),函数调用func(NULL)或func(0)会选择前者;如果将func(int)删除,编译器会自动将NULL或0转换成A*指针,进而调用func(A*)。如果调用func(nullptr),那么func(int)是不会被调用的,因为nullptr是指针类型,而不是int类型。
  3. NULL和0是有局限的,比如有以下模版函数:
void null_pointer_func(A* a){}

template<typename T>
void null_pointer_template_func(T value){
    null_pointer_func(value);
}

null_pointer_template_func(NULL);//编译器会报错
null_pointer_template_func(0);//编译器会报错

//编译器不会报错,因为编译器做以下几件事情:
// 1. 将nullptr的类型T推导为std::nullptr_t,也就是value的类型
// 2. 当value传递给null_pointer_func时,编译器做了一次隐式转换:std::nullptr_t变成了A*
// 3. null_pointer_func(value);成功调用
null_pointer_template_func(nullptr);
#C++##求职##我的实习求职记录#
全部评论

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
5 8 评论
分享
牛客网
牛客企业服务