뼈민
고급 개발자가 꿈인 코린이
뼈민
전체 방문자
오늘
어제
  • 분류 전체보기 (73)
    • QT and QML (40)
    • C++ (22)
      • C++심화 (21)
      • C++기본 (1)
    • 리눅스 (5)
      • 쉘스크립트 (0)
      • 자주쓰는 리눅스 명령어 (5)
    • 프로그래머이야기 (2)
    • 블로그 운영 (1)
    • 삼성전자투자기 (3)

블로그 메뉴

  • 홈
  • QT/QML

공지사항

인기 글

태그

  • Qt
  • device to device
  • vsomeip
  • stylev파일
  • C++
  • QML
  • someip

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
뼈민

고급 개발자가 꿈인 코린이

[C++] 4. null 과 nullptr의 차이점
C++/C++심화

[C++] 4. null 과 nullptr의 차이점

2019. 6. 9. 10:30
반응형

[C++] 4. null 과 nullptr의 차이점

 

 

안녕하세요 고급 개발자가 꿈인 코린이 입니다.

 

오늘은 null과 nullptr에 차이점에 대해서 포스팅 하겠습니다.

 

c++을 하시다보면 NULL 과 nullptr을 많이 쓰는데요 얼핏보면 똑같은 내용이라고 생각들지 모르겠지만

 

NULL과 nullptr은 다른 차이가 있습니다.

 

c++11이전 버전에서는 컴파일러가 NULL을 포인터가 아니라 정수 0과 동일하게 여깁니다.

 

그래서 아래 코드와 같이 switch문에 NULL인 값을 넣으면 정수 0에 매칭이 되어서 

 

0에대한 로그가 찍히게 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <ServiceClass.h>
 
using namespace std;
int main()
{
 
    ServiceClass *testClass = new ServiceClass();  
 
    testClass->nullPtrTest(nullptr);
 
    return 0;
}
 
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "ServiceClass.h"
 
ServiceClass::ServiceClass()
{
    mValue1 = 0;
    mValue2 = 0;    
}
 
ServiceClass::~ServiceClass()
{
 
}
 
void ServiceClass::nullPtrTest(char *test)
{
    cout << "nullPtrTest char test" << endl;
    int a = NULL;
 
    switch(a){
        case 0:
         cout << "NULL == 0" << endl;
        break;
        default:
         cout << "NULL != 0" << endl;
        break;
    }
}
 
void ServiceClass::nullPtrTest(int test)
{
    cout << "nullPtrTest int test" << endl;
}
 
 
 
 
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

 

위의 코드를 보면 nullPtrTest 함수를 호출할때 매개변수에 nullptr로 함수를 호출 하였습니다.

 

매개 변수에 nullptr를 넣고 호출하니 nullPtrTest 함수의 char * 매개변수의 함수가 호출이 되었고

 

그안에서 integer형 a라는 변수에 NULL을 놓고 스위치문들 돌렸더니 위의 실행 결과처럼 NULL이 0으로 

 

인식이 되어서 NULL == 0이라는 로그가 찍혔습니다.

 

위의 코드에 a라는 변수에 nullptr을 넣으면 a라는 변수는 integer형 변수이기 때문에 포인터로 초기화 

 

하려해서 빌드 에러가 납니다.

 

switch 문에 default값이 있다는 것은 a라는 변수가 0이 아니면 default값이 찍히게끔 되는데 

 

default값이 안찍히고 NULL == 0이라는 값이 찍혔다는 것은 NULL이 0과 같이 인식이 된다는 것입니다.

 

그래서 최근 실무에서는 포인터 변수를 초기화할때 NULL대신에 nullptr로 초기화는 많이 하는 추세 입니다.

 

이런 사소한 부분도 알아두시면 신입 프로그래머의 역량이 높아집니다.

 

여기 까지 NULL과 nullptr의 설명이었습니다.

 

감사합니다.

반응형

'C++ > C++심화' 카테고리의 다른 글

[C++]6. vector 사용하기(구조체 vector사용 하기)  (0) 2019.07.14
[C++]5. Enum값 사용하기  (0) 2019.06.19
[C++] 3. 변수 이름 및 함수 이름 코딩 룰에 맞게 설정하기(카멜 표기법,파스칼 표기법)  (0) 2019.06.08
[C++] 2. call by value 와 call by reference의 차이  (0) 2019.06.07
[C++] 1. 초보개발자가 되기전 필요한 역량(신입 프로그래머의 역량,국비지원 교육과정 6개월 후 취업)  (0) 2019.06.07
    'C++/C++심화' 카테고리의 다른 글
    • [C++]6. vector 사용하기(구조체 vector사용 하기)
    • [C++]5. Enum값 사용하기
    • [C++] 3. 변수 이름 및 함수 이름 코딩 룰에 맞게 설정하기(카멜 표기법,파스칼 표기법)
    • [C++] 2. call by value 와 call by reference의 차이
    뼈민
    뼈민

    티스토리툴바