第6回はnullptrを説明します。  

ポインタをどこも参照していない状態で初期化する際に、従来ではNULLを使っていました。

 1: int main()
 2: {
 3:	int* p = NULL;
 4:
 5:	return 0;
 6: }

しかし、このNULLはマクロ定義されているだけでVS2013の場合内部は

#define NULL 0

単純に0という数値であることが分かります。
しかしこの場合、オーバーロードの場合に問題があります。

 1: #include <iostream>
 2:
 3: using namespace std;
 4:
 5: void func(char n)
 6: {
 7:	cout << "Call char func" << endl;
 8: }
 9:
10: void func(char* n)
11: {
12:	cout << "Call char* func" << endl;
13: }
14:
15: int main()
16: {
17:	func(NULL);//func(char)が呼ばれる
18:	func((char*)NULL);//明示的にキャストしなければならない
19:
20:	return 0;
21: }

そこでポインタであることを指すキーワードとしてnullptrが出来ました。
使い方は従来のNULLをそのままnullptrにするだけです。

 1: int main()
 2: {
 3:	func(nullptr);//func(char*)が呼ばれる
 4:
 5:	return 0;
 6: }

NULLをnullptrに変更して問題が起こることは無いので、NULLを使っていた人はnullptrを使うようにしましょう。

以上でnullptrの説明を終わります。

前→C++11講座5回
次→C++11講座7回

選択肢 投票
やめろォ(建前) 0  
ナイスぅ(本音) 1  
(C++)流行らせコラ 0  

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-03-01 (土) 22:29:00