条款8.优先选择nullptr,而非0或null

优先选择nullptr,而非0或NULL

字面常量0的类型是int,而非指针。当c++在只能使用指针的语境中发现了一个0,它也会把它勉强解释为空指针

c++的基本观点还是0的类型是int,而非指针

从实际效果来说,以上结论对NULL也成立。NULL在技术细节上有一些不清不楚的成分,因为标准允许各个实现给予NULL非int的整数类型(如long)。

0和NULL都不具备指针类型

c++98中,这样的基本观点可能在指针类型和整型之间进行重载时发生意外。

void f(int);
void f(bool);
void f(void*);

f(0);		//调用的是f(int),而不是f(void*)

f(NULL);	//可能通不过编译,但一般会调用f(int),从来不会调用f(void*)

不要在指针类型和整型之间做重载

nullptr的优点在于,它不具备整数类型,也不具备指针类型,它可以被认为是一种任意类型的指针

nullptr的实际类型是std::nullptr_t,该类型可以隐式转换到所有的裸指针类型

调用重载函数f时传入nullptr会调用void*那个重载版本,因为nullptr无法被视作任何一种类型。

f(nullptr);		//调用的是f(void*)这个重载版本

使用nullptr而非0和NULL可以避免重载中的意外,也可以提升代码的清晰度,尤其在涉及到auto变量时。

auto result = findRecord();

if(result == 0){
    ...
}

如果不知道findRecord()函数的返回值类型的话,那么result是指针类型还是整数类型就不清楚了。

如果看到是下面这段代码

auto result = findRecord();
if(result == nullptr)
{
 	...   
}

这就没有多义性了。

要点速记

  • 相对于0和NULL,优先选择nullptr
  • 避免在整型和指针类型之间重载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值