nullptr (C++ コンポーネント拡張)
nullptr のキーワードが nullポインターの値を表します。オブジェクトのハンドル、内部ポインター、またはネイティブ ポインター型がオブジェクトを指すことを示すためにnullポインターの値を使用します。
マネージまたはネイティブ コードの nullptr を使用します。コンパイラは、マネージ コードとネイティブnullポインターの値に適した異なる命令を生成します。このキーワードのISO標準C++バージョンの使用については、nullptrを参照してください。
__nullptr のキーワードは nullptrと同じ意味がありますが、ネイティブ コードに対してのみ適用されますMicrosoft固有のキーワード。ネイティブC/C++コードの nullptr を使用し、[/clr] のコンパイラ オプションでコンパイルした場合、コンパイラは nullptr がネイティブ コードまたはマネージnullポインターの値を表示するかどうかを判断できません。コンパイラに変更の意図を明確にするために、マネージ値または __nullptr をネイティブの値を指定するように指定するに nullptr を使用します。
nullptr のキーワードはVisual Basicの Nothing と、Cの null と同じです。
使用方法
キーワード nullptr の場所でハンドル、ネイティブ ポインターで使用することもできます。関数の引数は使用できます。
nullptr のキーワードは、型およびで使用するためにをサポート:
nullptr のキーワードは、次のポインター型の初期化に使用できる:
ネイティブ ポインター
Windowsのランタイム ハンドル
マネージ ハンドル
マネージ内部ポインター
参照を使用する前にポインターやハンドルの参照がnullのテストに nullptr のキーワードを使用できます。
使用する言語間での関数呼び出しはエラー チェックにnullポインター正しく行わないようになります。
ハンドルをゼロに初期化できません; nullptr のみ使用できます。オブジェクトのハンドルへの定数0の割り当ては Object^にボックス化された Int32 のキャストを生成します。
使用例
次のコード例に nullptr のキーワードがハンドル、ネイティブ ポインターどこでも使用できるか、関数が引数使用できることを示します。と例は、使用する前に参照をチェックする nullptr のキーワードを使用できることを示しています。
// mcpp_nullptr.cpp
// compile with: /clr
value class V {};
ref class G {};
void f(System::Object ^) {}
int main() {
// Native pointer.
int *pN = nullptr;
// Managed handle.
G ^pG = nullptr;
V ^pV1 = nullptr;
// Managed interior pointer.
interior_ptr<V> pV2 = nullptr;
// Reference checking before using a pointer.
if (pN == nullptr) {}
if (pG == nullptr) {}
if (pV1 == nullptr) {}
if (pV2 == nullptr) {}
// nullptr can be used as a function argument.
f(nullptr); // calls f(System::Object ^)
}
例
次のコード例は、nullptr と、がネイティブ ポインターで交換して使用できることを示します。
// mcpp_nullptr_1.cpp
// compile with: /clr
class MyClass {
public:
int i;
};
int main() {
MyClass * pMyClass = nullptr;
if ( pMyClass == nullptr)
System::Console::WriteLine("pMyClass == nullptr");
if ( pMyClass == 0)
System::Console::WriteLine("pMyClass == 0");
pMyClass = 0;
if ( pMyClass == nullptr)
System::Console::WriteLine("pMyClass == nullptr");
if ( pMyClass == 0)
System::Console::WriteLine("pMyClass == 0");
}
出力
例
次のコード例に nullptr としてすべての型に任意の型またはネイティブ ポインターへのハンドル解釈することを示します。異なる型へのハンドルで関数をオーバーロードする場合は、あいまいさエラーが生成されます。nullptr は、明示的に型にキャストする必要があります。
// mcpp_nullptr_2.cpp
// compile with: /clr /LD
void f(int *){}
void f(int ^){}
void f_null() {
f(nullptr); // C2668
// try one of the following lines instead
f((int *) nullptr);
f((int ^) nullptr);
}
例
次のコード例に nullptr キャストを使用すると、nullptr の値を含む型にキャストのポインターやハンドルを返します。
// mcpp_nullptr_3.cpp
// compile with: /clr /LD
using namespace System;
template <typename T>
void f(T) {} // C2036 cannot deduce template type because nullptr can be any type
int main() {
f((Object ^) nullptr); // T = Object^, call f(Object ^)
// Delete the following line to resolve.
f(nullptr);
f(0); // T = int, call f(int)
}
例
次のコード例に nullptr が関数のパラメーターとして使用できることを示します。
// mcpp_nullptr_4.cpp
// compile with: /clr
using namespace System;
void f(Object ^ x) {
Console::WriteLine("test");
}
int main() {
f(nullptr);
}
出力
例
次のコード例は、ハンドルが宣言されており、明示的に初期化される場合には、プロパティとなります nullptr既定値に初期化される示します。
// mcpp_nullptr_5.cpp
// compile with: /clr
using namespace System;
ref class MyClass {
public:
void Test() {
MyClass ^pMyClass; // gc type
if (pMyClass == nullptr)
Console::WriteLine("NULL");
}
};
int main() {
MyClass ^ x = gcnew MyClass();
x -> Test();
}
出力
例
次のコード例に /clrしてコンパイルする場合 nullptr がネイティブ ポインターに代入できることを示しています。
// mcpp_nullptr_6.cpp
// compile with: /clr
int main() {
int * i = 0;
int * j = nullptr;
}
要件
コンパイラ オプション: (必須; /ZW、および /clrを含むすべてのコード生成オプションでサポートされる)