第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が出来ました。 1: int main() 2: { 3: func(nullptr);//func(char*)が呼ばれる 4: 5: return 0; 6: } NULLをnullptrに変更して問題が起こることは無いので、NULLを使っていた人はnullptrを使うようにしましょう。 以上でnullptrの説明を終わります。 |