Udostępnij za pośrednictwem


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:

  • sizeof

  • TypeID

  • throw nullptr(chociaż throw (Object^)nullptr; będzie działać)

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

nullptr

Koncepcje

Składnik rozszerzeń dla platform Runtime