歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++11中的指針空值nullptr

一、為什麼要有指針空值nullptr

在良好的編碼習慣中,聲明一個指針並對其進行初始化非常重要,未初始化的懸掛指針常導致一些難以調試的錯誤。往常,我們常這樣初始化指針變量:

int* my_ptr1=0;
int* my_ptr2=NULL;

但我們知道,NULL其實是一個宏定義,字面常量為0,即上述兩種方式本質上是一樣的。於是,這樣就有了一些麻煩,比如函數重載時,我們定義了如下兩個版本的函數:

#include<iostream>
using namespace std;
void f(char* c)
{
 cout << "invoke f(char* c)" << endl;
}
void f(int i)
{
 cout << "invoke f(int)" << endl;
}
int main()
{
 f(0);
 f(NULL);
 f((char*)0);
 f(nullptr);
 return EXIT_SUCCESS;
}

結果如下:


 
可見,f(NULL)並沒有調用想要的指針版本,而是調用了f(int)版本,這是因為NULL被定義為0,編譯器總是優先把0視為一個整型常量造成的。0在C++98中是有二義性的,編譯器首先解釋它是一個整型常量,其次是一個無類型指針(void*)。

 

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-05/101440p2.htm

 

Copyright © Linux教程網 All Rights Reserved