0、NULL和nullptr


/***

            C++ 空指针
            
           NULL 和 nullptr
           
  1. 以往我们使用NULL表示空指针。它实际上是个为0的int、long类整型值。下面的代码会产生岐义:
    void f(int i) {} // chose this one
    void f(const char* s) {}

    f(NULL);
  2. 为此C++ 11新增类型nullptr_t,它只有一个值nullptr。上面的调用代码可以写成: 
    void f(int i) {}
    void f(const char* s) {} // chose this one

    f(nullptr);
           
例子:
#include <iostream>

using namespace std;

//当没有f(int a)时,都会调用f(int*),0和NULL都会被解释成空指针
//但当有f(int a)时,0和NULL永远不会调到f(int *),只会调用f(int *)
//**** 上面的情况在没有模板时的确是那样,0和NULL都有可能被解释成空指针,但是模板时,0和NULL只会被编译器解释成整型,而不能转换成指针***
//void f(int a)
//{
//    cout << "f_int" << endl;
//}

void f(int *a)
{
    cout << "f_int*" << endl;
}

int main()
{
    f(0);
    f(NULL);
    f(nullptr);  //nullptr其实是nullptr_t,其不能被视为整型,其可以隐形的转换成所有的原始指针类型,即可以指向任意类型的指针

    return 0;
}
           
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值