[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 |