zoukankan      html  css  js  c++  java
  • c/c++ nullptr和NULL

    nullptr是c++11中的关键字,表示空指针

    要区分nullptr和NULL,首先要明白NULL的含义:

    NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中NULL为整数0
    所以在c++中int *p=NULL; 实际表示将指针P的值赋为0,而c++中当一个指针的值为0时,认为指针为空指针

    然后理解nullptr:

    nullptr是一个字面值常量,类型为std::nullptr_t,空指针常数可以转换为任意类型的指针类型。

    在c++中(void *)不能转化为任意类型的指针,即 int p=(void)是错误的,但int *p=nullptr是正确的,原因

    对于函数重载:若c++中 (void *)支持任意类型转换,函数重载时将出现问题下列代码中fun(NULL)将不能判断调用哪个函数

    void fun(int i){cout<<"1";};
    void fun(char *p){cout<<"2";};
    int main()
    {
    fun(NULL);  //输出1,c++中NULL为整数0
    fun(nullptr);//输出2,nullptr 为空指针常量。是指针类型
    }
    
  • 相关阅读:
    POJ 1306.Combinations
    HDU 5640.King's Cake
    HDU 1072.Nightmare
    HDU 2717.Catch That Cow
    HDU 1372.Knight Moves
    HDU 1548.A strange lift
    AOJ 802.运输宝物
    AOJ 794.西瓜理发记(二)
    AOJ 793.西瓜理发记(一)
    AOJ 789.买酒
  • 原文地址:https://www.cnblogs.com/rower/p/12904814.html
Copyright © 2011-2022 走看看