다음을 통해 공유


nullptr(C++ 구성 요소 확장)

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

사용 nullptr 는 관리 코드나 네이티브 코드를 사용 합니다.관리 및 네이티브 null 포인터 값에 대 한 지침은 적절 하지만 다른 컴파일러를 내보냅니다.ISO 표준 C++ 버전이이 키워드의 사용에 대 한에 대 한 자세한 내용은 nullptr.

__nullptr 키워드와 의미가 같습니다 Microsoft 특정 키워드는 nullptr, 하지만 네이티브 코드에만 적용 됩니다.사용 하는 경우 nullptr 네이티브 C/C++로 코드와 함께 다음 컴파일 된 /clr 컴파일러 옵션을 컴파일러에서 확인할 수 없습니다 여부 nullptr 네이티브 또는 관리 되는 null 포인터 값을 나타냅니다.사용 의도 컴파일러에 확인 하 여 nullptr 관리 되는 값을 지정할 수 또는 __nullptr 기본 값을 지정 합니다.

nullptr 키워드에 해당 하는 Nothing 에서 Visual Basic 및 null C#에서.

용도

nullptr 키워드 핸들, 네이티브 포인터 또는 함수 인수로 사용할 수 있습니다 어디서 나 사용할 수 있습니다.

nullptr 키워드는 형식이 아니므로 사용할 수 없습니다.

  • sizeof

  • typeid

  • throw nullptr(하지만 throw (Object^)nullptr; 작동 합니다)

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

  • 네이티브 포인터

  • Windows 런타임 핸들

  • 관리 되는 핸들

  • 관리 되는 내부 포인터

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

함수 호출 오류 검사에 대 한 null 포인터 값을 사용 하는 언어 중에서 올바르게 해석 됩니다.

0에 대 한 핸들을 초기화할 수 없습니다. 만 nullptr 사용할 수 있습니다.할당 개체 핸들에 상수 0 생성 한 박스형 Int32 및 캐스팅을 Object^.

예제

다음 코드 예제에서는 방법을 보여 줍니다 있는 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 사용 교대로에 대 한 원시 포인터입니다.

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

Output

  
  
  
  

예제

다음 코드 예제에서는 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 값입니다.

// 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 함수 매개 변수로 사용할 수 있습니다.

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

int main() {
   f(nullptr);
}

Output

  

예제

다음 코드 예제에서는 핸들 선언 하 고 명시적으로 초기화 하는 경우는 기본적으로 초기화 지를 보여 줍니다. 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();
}

Output

  

예제

다음 코드 예제에서는 nullptr 로 컴파일하여 네이티브 포인터를 지정할 수 있습니다 /clr.

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

요구 사항

컴파일러 옵션: (필요 없습니다. 포함 하 여 모든 코드 생성 옵션으로 지원 되는 /ZW/clr)

참고 항목

참조

nullptr

개념

런타임 플랫폼의 구성 요소 확장