轉:C++ NULL二義性問題,C++11引入nullptr原因

在編程邏輯世界,有因必有果,如果一個結果含糊不定(二義性),顯然是我們不想要的。C++11中引入nullptr是爲了解決NULL的二義性問題。

NULL二義性的體現

void func(int) {}
void func(int *) {}

當函數調用func(NULL)時會是怎樣執行?

先看C++對NULL的定義:

#if defined(__cplusplus)
# define NULL 0 /* C++中使用0作爲NULL的值 */
#else 
# define NULL ((void *)0) /* C中使用((void *)0)作爲NULL的值 */ 
#endif

我們可以看到C++的NULL被宏定義爲0,所以函數func(NULL)會因爲NULL爲0而導致調用func(int)函數,這是我們不想要的結果。

那怎麼解決問題呢?

使用nullptr(空指針常量),當函數調用func(nullptr)時則會調用func(int *)函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章