為什么要用nullptr

在我們C++的代碼的使用時(shí)我常用NULL作為空指針的判斷,或者指針的賦空,如下代碼:

#include "pch.h"
#include <iostream>

void test(char *p)
{
    printf("this is p");
}

int main()
{
    test(NULL);
}

代碼輸出:

this is p

但是,在C++中,NULL的定義是 0

  • ps:在C語(yǔ)言中,NULL 的定義是 (void*)空指針
#ifndef NULL
    #ifdef __cplusplus
        #define NULL 0
    #else
        #define NULL ((void *)0)
    #endif
#endif

因?yàn)樵贑++中,(void*)不能隱式的轉(zhuǎn)換為其他指針類型。所以使用int類型的0轉(zhuǎn)換為各種類型的空指針。

在這種情況下我們會(huì)出現(xiàn)一些二義性:

#include "pch.h"
#include <iostream>

void test(int n)
{
    printf("this is int");
}

void test(char *p)
{
    printf("this is p");
}

int main()
{
    test(NULL);
}

運(yùn)行結(jié)果:

this is int

我認(rèn)為NULL是空指針的意思,但是調(diào)用卻不是。

nullptr是C++11用來(lái)解決這個(gè)問(wèn)題引入的,專門用于處理空指針的情況。
如下:

#include "pch.h"
#include <iostream>

void test(int n)
{
    printf("this is int");
}

void test(char *p)
{
    printf("this is p");
}

int main()
{
    test(NULL);
    printf("\n");
    test(nullptr);
}

運(yùn)行輸出:

this is int
this is p
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • C++運(yùn)算符重載-下篇 本章內(nèi)容:1. 運(yùn)算符重載的概述2. 重載算術(shù)運(yùn)算符3. 重載按位運(yùn)算符和二元邏輯運(yùn)算符4...
    Haley_2013閱讀 1,531評(píng)論 0 49
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,658評(píng)論 1 32
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,676評(píng)論 1 51
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,246評(píng)論 0 38
  • 晚上舅舅給我發(fā)消息,大概說(shuō)了一下今天家里一大家子人回去祭祖的事情,一切都很順利。接著又提到我爸媽年齡大了,我該好好...
    蓮悅閱讀 347評(píng)論 2 3

友情鏈接更多精彩內(nèi)容