다음을 통해 공유


nullptr(C++/CLI 및 C++/CX)

키워드는 nullptr null 포인터 값을 나타냅니다. Null 포인터 값은 개체 핸들, 내부 포인터 또는 네이티브 포인터 형식이 개체를 가리키지 않음을 나타내는 데 사용합니다.

관리 코드 또는 네이티브 코드와 함께 사용합니다 nullptr . 컴파일러는 관리형 및 네이티브 Null 포인터 값에 대해 서로 다른 적절한 명령을 내보냅니다. 이 키워드의 ISO 표준 C++ 버전을 사용하는 방법에 대한 자세한 내용은 nullptr을 참조하세요.

__nullptr 키워드는 의미는 같지nullptr만 네이티브 코드에만 적용되는 Microsoft 관련 키워드입니다. 네이티브 C/C++ 코드와 함께 사용한 nullptr 다음 /clr 컴파일러 옵션을 사용하여 컴파일하는 경우 컴파일러는 네이티브 또는 관리되는 null 포인터 값을 나타내는지 여부를 nullptr 확인할 수 없습니다. 컴파일러에 대한 의도를 명확히 하려면 관리되는 값을 지정하거나 네이티브 값을 지정하는 __nullptr 사용합니다nullptr.

nullptr 워드는 Visual Basic의 Nothing 및 C#의 null동일합니다.

사용

키워드는 nullptr 핸들, 네이티브 포인터 또는 함수 인수를 사용할 수 있는 모든 곳에서 사용할 수 있습니다.

키워드는 nullptr 형식이 아니며 다음과 함께 사용할 수 없습니다.

  • sizeof

  • typeid

  • throw nullptr(단, throw (Object^)nullptr;은 사용 가능함)

키워드는 nullptr 다음 포인터 형식의 초기화에 사용할 수 있습니다.

  • 네이티브 포인터

  • Windows 런타임 핸들

  • 관리형 핸들

  • 관리형 내부 포인터

키워드를 nullptr 사용하여 참조가 사용되기 전에 포인터 또는 핸들 참조가 null인지 테스트할 수 있습니다.

오류 검사에 Null 포인터 값을 사용하는 언어 간의 함수 호출을 올바르게 해석해야 합니다.

핸들을 0으로 초기화할 수 없습니다. 만 nullptr 사용할 수 있습니다. 개체 핸들에 상수 0을 할당하면 boxed Int32Object^로의 캐스트가 생성됩니다.

예: nullptr 키워드

다음 코드 예제에서는 핸들, 네이 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 및 0

다음 코드 예제에서는 네이티브 포인터에서 0과 0을 서로 바꿔 사용할 수 있음을 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");
}
pMyClass == nullptr

pMyClass == 0

pMyClass == nullptr

pMyClass == 0

예: 핸들로 해석 nullptr

다음 코드 예제에서는 모든 형식에 대한 핸들 또는 모든 형식에 대한 네이 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 이 허용되고 값이 포함된 캐스트 형식에 대한 포인터 또는 핸들을 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

다음 코드 예제에서는 함수 매개 변수로 사용할 수 있습니다 nullptr .

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

int main() {
   f(nullptr);
}
test

예: 기본 초기화

다음 코드 예제에서는 핸들이 선언되고 명시적으로 초기화되지 않은 경우 기본적으로 초기화됨을 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();
}
NULL

예: 네이티브 포인터에 할당 nullptr

다음 코드 예제에서는 .을 사용하여 컴파일할 때 네이티브 포인터에 할당할 수 있음을 nullptr 보여 있습니다 /clr.

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

요구 사항

컴파일러 옵션: (필요하지 않음; 포함 /ZW/clr) 모든 코드 생성 옵션에서 지원됨

참고 항목

.NET 및 UWP용 구성 요소 확장
nullptr