Qaupot Blog
Software Engineering, Trip

108. nullptr / Cpp11

🕐 Sun, 21 Aug 2016 09:00:00 GMT 🕓 Wed, 25 Aug 2021 14:21:00 GMT

nullptr 키워드 (C++11)

nullptr 키워드는 포인터 만을 위한 NULL 상수입니다.

C 에도 NULL 이라는 상수는 0을 의미하는 정수이지만 포인터의 값에도 혼용되어 사용 되었습니다.

#include <iostream>

void echo(int val)
{
    printf("int\n");
    printf("%d\n", val);
}
void echo(int* val)
{
    printf("int pointer\n");
    if (val == nullptr)
        printf("null\n");
    else
        printf("%d\n", *val);
}

int main(int argc, char** argv)
{
    int val = 0;

    echo(0);
    echo(NULL);
    echo(&val);
    echo(nullptr);
}
int
0
int
0
int pointer
0
int pointer
null

echo 함수는 int 값 혹은 int 포인터를 인수로 받습니다.

  • NULL 은 int 값을 받는 함수를 우선 호출합니다.
  • 명시적으로 (int*)NULL 을 이용해 호출할 수 있지만 불편합니다.

nullptr 은 위 상황에서 int 포인터를 받는 함수만을 호출합니다.

예제에서 int 를 인수로 받는 함수를 제거하면 정상적으로 컴파일이 되지만, int*를 인수로 받는 함수를 제거하면 에러가 발생합니다.

  • 묵시적 변환은 int -> int* 변환은 허용 되지만, int* -> int 로 변환은 허용되지 않습니다.
  • 명시적 변환은 허용됩니다.
이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.