| ア | イ | ウ | エ | オ |
| カ | キ | ク | ケ | コ |
| サ | シ | ス | セ | ソ |
| タ | チ | ツ | テ | ト |
| ナ | ニ | ヌ | ネ | ノ |
| ハ | ヒ | フ | ヘ | ホ |
| マ | ミ | ム | メ | モ |
| ヤ | ユ | ヨ | ||
| ラ | リ | ル | レ | ロ |
| ワ | ヰ | ヴ | ヱ | ヲ |
| ン |
| A | B | C | D | E |
| F | G | H | I | J |
| K | L | M | N | O |
| P | Q | R | S | T |
| U | V | W | X | Y |
| Z | 数字 | 記号 | ||
C++11以降のC++、C++/CLIなどの予約語の一つで、NULLポインターを表わすもの。
nullptrは、NULLポインターを表現する。
nullptrを整数型と比較したり整数型に代入することは出来ないが、あらゆるポインター型との比較および代入が出来る。
NULLポインターを表わすキーワードという概念は、決して新しいものではない。
Cでは0または「(void *)0」を定義したNULLというマクロが標準的に使われ、特に後者が整数0とポインター0の区別が自明となるとあり、頻用されていた。
しかしC++では、void *から他のポインターへの暗黙の変換が出来ないため、次のような単純な例ですらコンパイルエラーが生じることになる。
char *p = NULL;
このためC++では、従来のCのような(void *)0が使用できなくなり、整数0で代用することとなり、多くの問題を生じさせながらも長く放置状態とされた。
その間、C#ではnull、C++/CLIではnullptrが実装で定義され使われ、C++でもC++11から、nullptrをC++/CLIから輸入する形で定義することになった。
C++においてnullptrは、元々予約語ではない。したがって、これを追加した場合、従来nullptrという名前の変数や関数などを使っていた実装に影響がある。
一時は、ライブラリでクラスとして定義する案も出されたが、最終的に却下されたようである。
C++11普及前に長く使われていたC++03の実装でnullptr相当を実装する例を、以下に紹介する。
const class nullptr_t
{
public:
template<typename T> operator T*() const { return 0; }
template<typename C, typename T> operator T C::*() const { return 0; }
private:
void operator&() const;
} nullptr = {};
コメントなどを投稿するフォームは、日本語対応時のみ表示されます