C++11 新特性之 nullptr

本文介绍了C++11引入的关键字nullptr,作为NULL的替代品,避免了类型转换的潜在问题。通过示例展示nullptr在函数调用中的作用,并探讨了其应用场景,包括与NULL的互换使用及初始化函数指针。同时强调了使用nullptr时应注意的唯一规则:nullptr不能赋值为整数或与整数比较。
摘要由CSDN通过智能技术生成

对于有一定编程基础的人对于NULL这个毫不陌生,但是NULL并不是一个关键字而是一个宏,他在C语言中这样定义:

#define NULL (void*)0 

被定义为了一个(void*)0的宏,所以NULL是一个不指向任何对象的指针,也可以用0表示。这样定义在C语言中使用是毫无问题的。但是,C++由于函数重载的问题,重新通过宏定义NULL,C++中的定义如下:

#ifndef NULL  
#ifdef __cplusplus  
#define NULL    0  
#else  
#define NULL    ((void *)0)  
#endif  
#endif 

可以看出,C++把NULL定义为了0,而不是C语言中的(void *)0;但是这样做,还是会造成函数的二义性,因为C++有参数类型的隐式转化问题。下面我们通过一段代码来讲解一下问题所在,代码如下:

void func(int a){
    printf("this is int a = %d",a);
}
void func(char* a){
    printf("this is char* a = %s",a);
}
int main(int argc, const char * argv[])
{
    
    func(0);
    
    return 0;
}

当我们在mai
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值