最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中NULL與nullptr的區(qū)別小結(jié)

 更新時(shí)間:2025年07月07日 11:30:30   作者:Jammingpro  
本文介紹了C++編程中NULL與nullptr的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

C++98空值——NULL

在良好的C/C++編程習(xí)慣中,聲明一個(gè)變量時(shí)最好給該變量一個(gè)合適的初始值,否則可能會出現(xiàn)
不可預(yù)料的錯誤,比如未初始化的指針。如果一個(gè)指針沒有合法的指向,我們基本都是按照如下
方式對其進(jìn)行初始化:??

int* p = NULL;

NULL實(shí)際上就是宏,在C頭文件stddef.h中可以看到關(guān)于NULL的定義??

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

可以看到,NULL可能被定義為字面常量0,或者被定義為無類型指針(void*)的常量。不論采取何
種定義,在使用空值的指針時(shí),都不可避免的會遇到一些麻煩,比如:

程序本意是想通過func(NULL)調(diào)用指針版本的func(int*)函數(shù),但是由于NULL被定義成0,因此與程序的初衷相悖。
在C++98中,字面常量0既可以是一個(gè)整形數(shù)字,也可以是無類型的指針(void*)常量,但是編譯器
默認(rèn)情況下將其看成是一個(gè)整形常量,如果要將其按照指針方式來使用,必須對其進(jìn)行強(qiáng)轉(zhuǎn)(void
*)0。

C++11空值——nullptr

既然使用NULL存在問題,那么就一定會有其他方式替換它。那就是nullptr。底層原理上,nullptr 在編譯時(shí)會被翻譯為一個(gè)空指針常量的特殊值。這個(gè)特殊的值可以根據(jù)編譯器的實(shí)現(xiàn)而有所不同,但它通常被定義為被解引用時(shí)不引發(fā)錯誤的值
一句話總結(jié):nullptr更安全,不會出現(xiàn)引發(fā)不必要的錯誤。
?nullptr注意事項(xiàng):
1.在使用nullptr表示指針空值時(shí),不需要包含頭文件,因?yàn)?code>nullptr是C++11作為新關(guān)鍵字引入
的。
2. 在C++11中,sizeof(nullptr)sizeof((void*)0)所占的字節(jié)數(shù)相同。
3.為了提高代碼的健壯性,在后續(xù)表示指針空值時(shí)建議最好使用nullptr。

區(qū)別對比

特性NULLnullptr
引入版本C 和早期的 C++C++11
定義宏,通常定義為 #define NULL 0關(guān)鍵字,類型為 std::nullptr_t
類型整數(shù)常量,通常是 int專用類型 std::nullptr_t
指針轉(zhuǎn)換可隱式轉(zhuǎn)換為指針類型,但可能引起歧義可隱式轉(zhuǎn)換為任何指針類型,無歧義
整數(shù)轉(zhuǎn)換是一個(gè)整數(shù),參與整數(shù)運(yùn)算不是整數(shù),不能參與整數(shù)運(yùn)算
安全性易引起類型混淆,存在潛在的歧義問題類型安全,避免了指針和整數(shù)混淆的問題
適用性向后兼容的代碼,舊式 C++ 項(xiàng)目現(xiàn)代 C++ 編程,推薦使用

示例 

展示了 nullptr 和 NULL 的不同效果:

#include <iostream>
using namespace std;

void func(int) {
    cout << "func(int) called" << endl;
}

void func(void*) {
    cout << "func(void*) called" << endl;
}

int main() {
    func(NULL);    // 輸出:func(int) called,因?yàn)?NULL 是整數(shù)類型
    func(nullptr); // 輸出:func(void*) called,因?yàn)?nullptr 是空指針類型

    // 類型檢查
    int* p1 = NULL;       // 合法,NULL 轉(zhuǎn)換為 int*
    // int val = nullptr; // 錯誤,nullptr 不能隱式轉(zhuǎn)換為 int
    int* p2 = nullptr;    // 合法,nullptr 是類型安全的空指針

    return 0;
}

到此這篇關(guān)于C++中NULL與nullptr的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)C++ NULL與nullptr內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt開發(fā)之使用socket實(shí)現(xiàn)遠(yuǎn)程控制

    Qt開發(fā)之使用socket實(shí)現(xiàn)遠(yuǎn)程控制

    本篇文章將會介紹下位機(jī)通過心跳包和上位機(jī)之間進(jìn)行數(shù)據(jù)交互和遠(yuǎn)程功能控制的實(shí)現(xiàn)方法。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-11-11
  • 帶你理解C語言中的漢諾塔公式

    帶你理解C語言中的漢諾塔公式

    大家好,本篇文章主要講的是帶你理解C語言中的漢諾塔公式,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++設(shè)計(jì)一個(gè)簡單內(nèi)存池的全過程

    C++設(shè)計(jì)一個(gè)簡單內(nèi)存池的全過程

    利用C/C++開發(fā)大型應(yīng)用程序中,內(nèi)存的管理與分配是一個(gè)需要認(rèn)真考慮的部分,下面這篇文章主要給大家介紹了關(guān)于C++設(shè)計(jì)一個(gè)簡單內(nèi)存池的全過程,需要的朋友可以參考下
    2021-09-09
  • C語言示例講解動態(tài)/文件/靜態(tài)功能版本的通訊錄實(shí)現(xiàn)

    C語言示例講解動態(tài)/文件/靜態(tài)功能版本的通訊錄實(shí)現(xiàn)

    通訊錄是一個(gè)可以記錄親人、好友信息的工具,這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)通訊錄管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C語言中回調(diào)函數(shù)和qsort函數(shù)的用法詳解

    C語言中回調(diào)函數(shù)和qsort函數(shù)的用法詳解

    這篇文章主要為大家詳細(xì)介紹一下C語言中回調(diào)函數(shù)和qsort函數(shù)的用法教程,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
    2022-07-07
  • c語言讀取csv文件和c++讀取csv文件示例分享

    c語言讀取csv文件和c++讀取csv文件示例分享

    這篇文章主要介紹了c語言讀取csv文件和c++讀取csv文件示例,需要的朋友可以參考下
    2014-03-03
  • OpenCV使用鼠標(biāo)響應(yīng)裁剪圖像

    OpenCV使用鼠標(biāo)響應(yīng)裁剪圖像

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)鼠標(biāo)響應(yīng)裁剪圖像,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語言之初始if語句詳解

    C語言之初始if語句詳解

    本文主要介紹C語言中的if語句,這里詳細(xì)介紹了if 語句并提供了簡單的示例代碼,希望能幫助編程入門的小伙伴學(xué)習(xí),希望能夠給你帶來幫助
    2021-08-08
  • C語言實(shí)現(xiàn)時(shí)區(qū)轉(zhuǎn)換函數(shù)的實(shí)例

    C語言實(shí)現(xiàn)時(shí)區(qū)轉(zhuǎn)換函數(shù)的實(shí)例

    這篇文章主要介紹了C語言實(shí)現(xiàn)時(shí)區(qū)轉(zhuǎn)換函數(shù)的實(shí)例的相關(guān)資料,這里分析需求并提供實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-08-08
  • C和C++的區(qū)別詳解

    C和C++的區(qū)別詳解

    這篇文章主要介紹了C和C++之間的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10

最新評論

栾城县| 太康县| 宣威市| 洞口县| 瑞安市| 黄陵县| 澄江县| 蛟河市| 睢宁县| 出国| 稷山县| 政和县| 江永县| 绥中县| 沙河市| 九龙城区| 治县。| 罗甸县| 楚雄市| 高雄县| 广东省| 精河县| 镇赉县| 封开县| 兰西县| 唐河县| 太和县| 富平县| 尼勒克县| 毕节市| 开平市| 来宾市| 璧山县| 定州市| 临颍县| 修武县| 余干县| 东辽县| 临洮县| 广饶县| 达孜县|