[C++][Visual Studio]Visual studio 2010 C++0x new feature: nullptr
Visual studio 2010為C++的開發人員新增了nullptr這個C++0x的功能,用以表示空的指標位置,取代原先我們所使用的NULL,將空指標和整數0 的概念拆開,會有這樣的功能提出是因為以前用NULL來做空指標的處理時,由於NULL的定義為整數0,並非是真的空指標型態,所以在某些特定的狀況下使用會錯亂。
/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
像是下面這個範例帶入NULL,我們預期運行到參數為int*型態的多載方法。
...
void Test(int* value)
{
cout << "void Test(int* value)";
}
void Test(int value)
{
cout << "void Test(int value)";
}
int _tmain(int argc, _TCHAR* argv[])
{
Test(NULL);
return 0;
}
但在運行後卻發現他進入的是參數型態為int的多載方法,整個運行不如我們所預期。
要將運行導回正確的多載方法,我們必須自行做些額外的轉換動作,將NULL轉型為預期的型態再帶入方法叫用。
Test((int*)NULL);
在VS2010由於支援了C++0x的nullptr,可以直接用nullptr來取代NULL。
Test(nullptr);
完整的範例如下:
// test auto.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
void Test(int* value)
{
cout << "void Test(int* value)\n";
}
void Test(int value)
{
cout << "void Test(int value)\n";
}
int _tmain(int argc, _TCHAR* argv[])
{
Test(NULL);
Test((int*)NULL);
Test(nullptr);
return 0;
}
運行結果如下: