第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回

#vote(やめろォ(建前)[0],ナイスぅ(本音)[1],(C++)流行らせコラ[0])

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS