[C++][Visual Studio]Visual studio 2010 C++0x new feature: nullptr

[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的多載方法,整個運行不如我們所預期。

image

 

要將運行導回正確的多載方法,我們必須自行做些額外的轉換動作,將NULL轉型為預期的型態再帶入方法叫用。


Test((int*)NULL);

image

 

在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;
}

 

運行結果如下:

image

 

Link