2 C 11 nullptr關鍵字及用法

2022-05-08 14:30:08 字數 862 閱讀 6622

c++在底層原始碼中 null 這個巨集是這樣定義的:

#ifndef null

#ifdef __cplusplus

#define null 0

#else

#define null ((void *)0)

#endif

#endif

也就是說如果原始碼是 c++ 程式 null 就是 0,如果是 c 程式 null 表示 (void*)0。那麼為什麼要這樣做呢? 是由於 c++ 中,void * 型別無法隱式轉換為其他型別的指標,此時使用 0 代替 ((void *)0),用於解決空指標的問題。這個 0(0x0000 0000)表示的就是虛擬位址空間中的 0 位址,這塊位址是唯讀的。

虛擬位址空間結構圖

c++ 中將 null 定義為字面常量 0,並不能保證在所有場景下都能很好的工作,比如,函式過載時,null 和 0 無法區分:

我們通過下面乙個小小的例子來發現null的一點問題:

class

test

void testwork(int *index)

};int

main()

執行結果:

null在c++裡表示空指標,看到問題了吧,我們呼叫test.testwork(null),其實期望是呼叫的是void testwork(int * index),但結果呼叫了void testwork(int index)。但使用nullptr的時候,我們能呼叫到正確的函式。

c 11關鍵字剖析

1 auto 該關鍵字用於兩種情況 1.宣告變數時 根據初始化表示式自動推斷變數型別。2.宣告函式作為函式返回值的佔位符。2static static變數只初始化一次,除此之外它還有可見性的屬性 1.static修飾函式內的 區域性 變數時,表明它不需要在進入或離開函式時建立或銷毀。且僅在函式內可見...

QT及C 關鍵字

override 描述 override保留字表示當前函式重寫了基類的虛函式。目的 1.在函式比較多的情況下可以提示讀者某個函式重寫了基類虛函式 表示這個虛函式是從基類繼承,不是派生類自己定義的 2.強制編譯器檢查某個函式是否重寫基類虛函式,如果沒有則報錯。用法 在類的成員函式引數列表後面新增該關鍵...

1 C 11 auto關鍵字及用法

auto 可以自動推理資料型別。使用語法如下 include include using namespace std intmain auto c 定義乙個auto的系列的變數必須始終推倒成同一型別 auto x1,x2 auto a,b 如果初始化表示式是引用或const,則去除引用或const語...