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 키워드는 형식이 아니므로 사용할 수 없습니다.
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)