nullptr (rozšíření komponent C++)
nullptr Představuje klíčové slovo hodnotu null ukazatel.Použijte hodnotu null ukazatel označuje, že popisovač objektu, vnitřní ukazatel nebo nativní ukazatele typu neodkazuje na objekt.
Použití nullptr s spravované nebo nativní kód.Kompilátor vydává různé, ale vhodné pokyny pro spravované a nativní ukazatele null hodnoty.Informace o použití ISO standard C++ verze tohoto klíčového slova, viz nullptr.
__nullptr Je klíčové slovo Microsoft specifické klíčové slovo, které má stejný význam jako nullptr, ale týká se pouze nativní kód.Pokud používáte nullptr kódu s nativní C/C++ a potom zkompilujete s /CLR možnost kompilátoru, kompilátor nemůže určit, zda nullptr označuje hodnotu nativní nebo spravované ukazatele null.Chcete-li provést váš záměr srozimitelně pro kompilátor, použijte nullptr určit hodnotu spravované nebo __nullptr určit nativní hodnotu.
nullptr Klíčové slovo je ekvivalentní Nothing v jazyce Visual Basic a null v jazyce C#.
Použití
nullptr Klíčové slovo lze použít kdekoli argument funkce, nativní ukazatel nebo popisovač lze použít.
nullptr Klíčové slovo není typ a není podporován pro použití s:
throw nullptr(Přestože throw (Object^)nullptr; bude fungovat)
nullptr Inicializace ukazatel následující typy lze použít klíčové slovo:
Nativní ukazatele
Popisovač Windows Runtime
Spravované úchyt
Vnitřní ukazatel spravované
nullptr Klíčové slovo lze použít k testování, pokud je ukazatel nebo popisovač odkaz null před odkaz.
Správně by měl být interpretován volání funkce mezi jazyky, které používají hodnoty ukazatele null pro kontrolu chyb.
Nelze inicializovat popisovač na nulu; pouze nullptr lze použít.Vytváří přiřazení konstantní 0 popisovač objektu krabici Int32 a přetypovat na Object^.
Příklad
Následující příklad kódu ukazuje, že nullptr kdykoli popisovač nativní ukazatele můžete použít klíčové slovo nebo argument funkce lze použít.A příklad ukazuje, že nullptr klíčové slovo lze zkontrolovat odkaz před jeho použitím.
// 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 ^)
}
Příklad
Následující příklad kódu ukazuje, že nullptr a nula zaměnitelné na nativní ukazatele.
// 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");
}
Výsledek
Příklad
Následující příklad kódu ukazuje, že nullptr je interpretován jako popisovač pro libovolný typ nebo nativní ukazatele myši na libovolný typ.V případě funkce přetížení s úchyty pro různé typy, bude generována chyba nejednoznačnosti.nullptr Musel být explicitně přetypovat 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);
}
Příklad
Následující příklad kódu ukazuje, že obsazení nullptr je povolena a vrátí ukazatel nebo popisovač přetypování typ, který obsahuje nullptr hodnotu.
// 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)
}
Příklad
Následující příklad kódu ukazuje, že nullptr lze použít jako parametr funkce.
// mcpp_nullptr_4.cpp
// compile with: /clr
using namespace System;
void f(Object ^ x) {
Console::WriteLine("test");
}
int main() {
f(nullptr);
}
Výsledek
Příklad
Následující příklad kódu ukazuje, že při deklarovat a inicializovat není explicitně úchyty jsou inicializována na výchozí 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();
}
Výsledek
Příklad
Následující příklad kódu ukazuje, že nullptr lze přiřadit nativní ukazatele při kompilaci s /clr.
// mcpp_nullptr_6.cpp
// compile with: /clr
int main() {
int * i = 0;
int * j = nullptr;
}
Požadavky
Možnost kompilátoru: (není povinné; podporuje všechny možnosti generování kódu, včetně /ZW a /clr)