nullptr (C++ Component Extensions)
nullptr Reprezentuje słowa kluczowego wartość null, wskaźnik.Użyj wartości null, wskaźnik do wskazania, że uchwyt do obiektu, wskaźnik wnętrza lub typu wskaźnik nie wskazuje obiekt.
Użycie nullptr z kodem zarządzanym lub macierzystym.Kompilator generuje instrukcje odpowiednie, ale inne dla wartości wskaźnika null zarządzanego i macierzystym.Informacje za pomocą wersji C++ standard ISO tego słowa kluczowego, zobacz nullptr.
__nullptr Słów kluczowych jest słowem kluczowym specyficzne dla firmy Microsoft, która ma takie samo znaczenie jak nullptr, ale dotyczy tylko kodu macierzystego.Jeśli używasz nullptr z macierzystego C/C++ kod, a następnie skompilować z /CLR opcję kompilatora kompilator nie może określić, czy nullptr wskazuje wartość Pusty wskaźnik macierzysty lub zarządzany.Aby wyczyścić, aby kompilator swój zamiar, użyj nullptr do określenia wartości zarządzanych lub __nullptr określ wartość native.
nullptr Słów kluczowych jest równoważne z Nothing w języku Visual Basic i null w C#.
Sposób użycia
nullptr Słowo kluczowe może służyć dowolnym można uchwyt, wskaźnik lub argument funkcji.
nullptr Słowo kluczowe nie jest typem i nie jest obsługiwana do użytku z:
nullptr Słów kluczowych mogą być używane w inicjowania następujące typy wskaźnika:
Wskaźnik macierzysty
Uchwyt obsługi Windows
Uchwyt zarządzanych
Zarządzanej wskaźnika wnętrz
nullptr Słowa kluczowego można sprawdzić, czy odwołanie wskaźnik lub uchwyt ma wartość null, zanim zostanie użyte odwołanie.
Wywołania funkcji wśród języków, które używają wartości null wskaźnika sprawdzania błędów powinny być interpretowane poprawnie.
Nie można zainicjować dojścia do zera; tylko nullptr może być używany.Pakować produkuje przypisania stałych 0, aby uchwyt do obiektu Int32 i oddanych do Object^.
Przykład
Poniższy przykład kodu pokazuje, że nullptr wszędzie tam, gdzie uchwyt, wskaźnik, można użyć słowa kluczowego lub argumentu funkcja może być używany.I w przykładzie pokazano, że nullptr można użyć słowa kluczowego, sprawdzić odwołanie, przed użyciem.
// 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 ^)
}
Przykład
Poniższy przykład kodu pokazuje, że nullptr i zero mogą być używane zamiennie w macierzystym wskaźniki.
// 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");
}
Dane wyjściowe
Przykład
Poniższy przykład kodu pokazuje, że nullptr jest interpretowany jako uchwyt do dowolnego typu lub wskaźnik macierzysty do dowolnego typu.W przypadku funkcji Przeładowanie z uchwytami do różnych typów, zostanie wygenerowany błąd niejednoznaczności.nullptr Musi być jawnie rzutować na typ.
// 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);
}
Przykład
Poniższy przykład kodu pokazuje, że odlewy nullptr jest dozwolona, a następnie zwraca wskaźnik lub uchwyt typ rzutowania, który zawiera nullptr wartość.
// 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)
}
Przykład
Poniższy przykład kodu pokazuje, że nullptr może być używany jako parametr funkcji.
// mcpp_nullptr_4.cpp
// compile with: /clr
using namespace System;
void f(Object ^ x) {
Console::WriteLine("test");
}
int main() {
f(nullptr);
}
Dane wyjściowe
Przykład
Poniższy przykład kodu pokazuje, że gdy uchwyty są deklarowane i nie zostało zainicjowane, są one domyślne można zainicjować 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();
}
Dane wyjściowe
Przykład
Poniższy przykład kodu pokazuje, że nullptr mogą być przypisane do macierzystego wskaźnika podczas kompilacji z /clr.
// mcpp_nullptr_6.cpp
// compile with: /clr
int main() {
int * i = 0;
int * j = nullptr;
}
Wymagania
Opcja kompilatora: (nie jest wymagane; obsługiwane przez wszystkie opcje generowania kodu, w tym /ZW i /clr)
Zobacz też
Informacje
Koncepcje
Component Extensions dla platform środowiska uruchomieniowego