nullptr (Komponentenerweiterungen für C++)

Das nullptr-Schlüsselwort stellt einen NULL-Zeiger-Wert dar.Verwenden Sie einen NULL-Zeiger-Wert, um anzugeben, dass ein Objekthandle innerer Zeiger, oder systemeigener Zeigertyp nicht auf ein Objekt zeigt.

Verwenden Sie nullptr entweder mit verwaltet oder systemeigenen Code.Die Compilerausgaben verwenden jedoch unterschiedliche Anweisungen für die verwalteten und systemeigenen NULL-Zeiger-Werte.Informationen zum Verwenden der ISO-Standard-C++-Version dieses Schlüsselworts, finden Sie unter nullptr.

Das __nullptr-Schlüsselwort ist ein Microsoft-Besondereschlüsselwort, das die gleiche Bedeutung wie nullptr aufweist, sondern gilt nur für systemeigenen Code.Wenn Sie nullptr mit systemeigenen C/C++-Code verwenden und dann mit der /clr-Compileroption kompilieren, kann der Compiler nicht ermitteln, ob nullptr einen systemeigenen oder verwalteten einen NULL-Zeiger-Wert angibt.Um dem Compiler Ihre Absicht verständlich zu machen, verwenden Sie nullptr um einen verwalteten Wert __nullptr anzugeben oder um einen systemeigenen Wert anzugeben.

Das nullptr-Schlüsselwort ist zu Nothing in Visual Basic und in null in C# entspricht.

Verwendung

Das nullptr-Schlüsselwort kann verwendet werden, wo ein Handle systemeigener Zeiger, oder Funktionsargument kann verwendet werden.

Das nullptr-Schlüsselwort ist kein Typ und ist nicht zur Verwendung mit unterstützt:

  • sizeof

  • typeid

  • throw nullptr (obwohl throw (Object^)nullptr; funktioniert)

Das nullptr-Schlüsselwort kann in der Initialisierung der folgenden Zeigertypen verwendet werden:

  • Systemeigener Zeiger

  • Windows Runtime-Handle

  • Verwaltetes Handle

  • Verwalteter innerer Zeiger

Das nullptr-Schlüsselwort kann verwendet werden, um zu testen, wenn ein Zeiger- oder Handleverweis NULL ist, bevor der Verweis verwendet wird.

Funktionsaufrufe mit Sprachen, die NULL-Zeiger-Werte zur Fehlerprüfung verwenden, sollten ordnungsgemäß interpretiert werden.

Sie können einen Handletyp nicht Null initialisieren; nur nullptr kann verwendet werden.Zuweisung von Konstanten 0 zu einem Objekt erzeugt geschachteltes Int32 und eine Typumwandlung in Object^.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, dass dem nullptr-Schlüsselwort immer zusammen mit verwendet werden kann, ein Handle systemeigener Zeiger oder Funktionsargument verwendet werden kann.Die und das Beispiel wird veranschaulicht, dass das nullptr-Schlüsselwort verwendet werden kann, um einen Verweis zu überprüfen, bevor es verwendet wird.

// 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 ^)
}

Beispiel

Im folgenden Codebeispiel wird dies nullptr an und Nullen kann für systemeigene Zeiger synonym verwendet werden.

// 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");
}

Ausgabe

  
  
  
  

Beispiel

Das folgende Codebeispiel zeigt, dass nullptr während ein Handle auf jeden Typ oder einem systemeigenen Zeiger auf jeden Typ interpretiert wird.Bei der Funktionsüberladung mit Handles zu verschiedenen Typen, wird ein Mehrdeutigkeitsfehler generiert.nullptr würde zu einem Typ explizit umgewandelt werden müssen.

// 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);
}

Beispiel

Das folgende Codebeispiel zeigt, an, dass das Umwandeln von nullptr zulässig ist und gibt einen Zeiger oder ein Handle für Umwandlungstyp zurück, der den nullptr-Wert enthält.

// 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)
}

Beispiel

Das folgende Codebeispiel zeigt, dass nullptr als Funktionsparameter verwendet werden kann.

// mcpp_nullptr_4.cpp
// compile with: /clr
using namespace System;
void f(Object ^ x) {
   Console::WriteLine("test");
}

int main() {
   f(nullptr);
}

Ausgabe

  

Beispiel

Im folgenden Codebeispiel wird, dass Handles deklariert werden und nicht explizit initialisiert, sie werden standardmäßig dar, der an nullptr initialisiert wird.

// 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();
}

Ausgabe

  

Beispiel

Das folgende Codebeispiel zeigt, dass nullptr zu einem systemeigenen Zeiger zugewiesen werden kann, wenn Sie mit /clr kompilieren.

// mcpp_nullptr_6.cpp
// compile with: /clr
int main() {
   int * i = 0;
   int * j = nullptr;
}

Anforderungen

Compileroption: (Nicht benötigt, unterstützt durch alle Codegenerierungsoptionen, einschließlich /ZW und /clr)

Siehe auch

Referenz

nullptr

Konzepte

Komponentenerweiterungen für Laufzeitplattformen