C NULL이 C++11 Nullptr과 같습니까?
나는 사용하기를 좋아합니다.nullptr
NULL 대신 입력합니다.이제 C 함수를 호출합니다.libjansson
이 경우).
NULL
C에서는 구현이 정의되어 있습니다.
위해서nullptr
"Null 포인터 상수는 0으로 평가되는 정수 유형의 정수 상수 식(5.19) r 값입니다."
그래서 가장 안전한 방법은:
auto string_obj=json_object_get(m_handle,name);
if(string_obj!=NULL)
{
auto string=json_string_value(string_obj);
if(string!=NULL)
{return string;}
}
return nullptr;
정말로 필요한가요? 아니면 더 간단하게 할 수 있나요?
auto string_obj=json_object_get(m_handle,name);
if(string_obj!=nullptr)
{
return json_string_value(string_obj); //Assume there is no difference between C NULL and C++11 nullptr
}
return nullptr;
C++11 이상에서, 포인터는==NULL
또한==nullptr
그리고 역도 성립.
용도NULL
포인터와 비교하는 것 이외에는 (예를 들어 문자열 끝의 널 바이트를 나타내는 데 사용) 작동하지 않습니다.nullptr
.
어떤 경우에는,NULL
이라#define NULL 0
정수 상수로서0
는 포인터와 비교할 때 C 및 C++에 특수하게 적용됩니다.이 유형이 아닌 정보는 C와 C++ 모두에서 일부 문제를 야기하므로 C++에서는 "적절한" 사용 사례에서 동일한 작업을 수행하는 특수 유형과 값을 만들기로 결정했으며 대부분의 "잘못된" 사용 사례에서 안정적으로 컴파일하지 못했습니다.
C++ 구현이 상호 작용 중인 C 구현과 호환되는 한(이것이 사실이 아닌 경우는 매우 드물다) 모든 것이 작동해야 합니다.
아주 분명하게 말하자면, 만약에.ptr
는 임의의 종류의 포인터이며, C++에서 다음 식은 동등합니다.
ptr == nullptr
ptr == NULL
ptr == 0
!ptr
다음과 같습니다.
ptr = nullptr
ptr = NULL
ptr = 0
그리고 만약에X
는 일부 유형이며, 다음 문장도 마찬가지입니다.
X* ptr = nullptr;
X* ptr = NULL;
X* ptr = 0;
nullptr
유형을 추론하는 템플릿 함수에 전달할 때 다릅니다(NULL
또는0
…이 되다int
포인터를 기대하는 인수로 전달되지 않는 한, 동안nullptr
a로 남음nullptr_t
), 그리고 어떤 맥락에서 사용될 때.nullptr
컴파일되지 않음(예:char c = NULL;
(참고, 아님)char* c=NULL;
)
마지막으로, 문자 그대로:
NULL == nullptr
사실입니다.
그NULL
상수가 포인터 유형으로 승격되고 포인터로서 null 포인터이며, 이는 다음과 동일하게 비교됩니다.nullptr
.
이 모든 것에도 불구하고 다음과 같은 것이 항상 사실인 것은 아닙니다.
foo(NULL)
그리고.
foo(nullptr)
같은 일을 합니다.
void bar(int) { std::cout << "int\n"; }
void bar(void*) { std::cout << "void*\n"; }
template<class T>
void foo(T t) { bar(t); }
foo(NULL);
foo(nullptr);
언급URL : https://stackoverflow.com/questions/36484473/is-c-null-equal-to-c11-nullptr
'source' 카테고리의 다른 글
.다른 공용 키 토큰을 사용하는 Net 어셈블리 바인딩 리디렉션 (0) | 2023.06.23 |
---|---|
SQLAlchemy를 사용하여 Oracle 데이터베이스에 연결 (0) | 2023.06.23 |
열 값을 기준으로 참/거짓을 선택하는 방법은 무엇입니까? (0) | 2023.06.23 |
$209 달러 몽고드의 $프로젝트 (0) | 2023.06.23 |
C에서 음의 숫자를 이동합니다. (0) | 2023.06.23 |