일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 고려대학교
- 신경회로망
- Neural Network
- Python
- SSM
- 파이썬
- hopfield network
- Friendship
- 패턴인식
- 나르왈프레오
- BAM
- 하이퍼바이저
- 삼성소프트웨어멤버십
- Bidirectional Associative Memory
- 인공지능
- 가상화
- NarwalFreo
- 구글 앱 엔진
- 물걸레로봇청소기추천
- Google App Engine
- 증강현실
- 물걸레자동세척로봇청소기
- 패턴 인식
- 삼성
- 갤럭시탭S8울트라
- 빅데이터
- 신경망
- 동아리
- 삼성전자 소프트웨어멤버십 SSM
- 멤버십
Archives
- Today
- Total
정보공간_1
[4기 대구 하호성] nullptr 본문
안녕하세요.
대구멤버십 22-1기 하호성입니다.
c++에 있는 nullptr에 대해 알아보려 합니다.
보통 C언어에서 포인터가 아무것도 가르키고 있지 않다는 것을 나타낼 때 NULL이라는 값을 씁니다.
NULL : 포인터가 아무것도 가르키고 있지 않다는 것을 나타내기 위한 값(C언어에서는 0)
그런데 NULL은 C++에서 약간의 문제가 있습니다.
위 프로그램의 결과가 아래와 같이 나옵니다.
포인터와 같은 개념으로 썼던 NULL이 함수 오버로딩에서 int와 같은 정수로 인식돼 함수를 콜하게 됩니다.
그 이유는 NULL이 다음과 같이 전처리기에 의해 0으로 치환되기 때문입니다.
위 문제를 해결하기 위해 nullptr이 나오게 되었습니다.
c++의 연산자 재정의중에 변환 연산자를 재정의 합니다.
이 때 포인터 자료형을 모두 변환하기 위해 템플릿을 이용합니다.
위와 같이 클래스를 선언하고 mynullptr을 사용하게 되면 아까 예제의 문제를
해결할 수 있습니다.
결과화면
하지만 아직까지 문제가 더 남아있습니다.
위와 같이 클래스 멤버 변수에 대한 포인터는 방금 만든 nullptr로는 해결이 되지 않습니다.
그래서 다음과 같이 클래스 멤버 변수에 대한 포인터 변환 연산자를 재정의 합니다.
소스코드
실행화면
마지막으로 상수 클래스로 선언하고
&연산자를 막으면 아래와 같이 완성됩니다.
위의 모습이 c++에 있는 nullptr의 모습입니다.
NULL보다 nullptr을 사용하는 것이 문제를 미연에 방지할 수 있습니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[4기 신촌 김시재] OpenGL에서 텍스처를 빠르게 갱신하는 방법 (0) | 2013.12.06 |
---|---|
[4기 대구 하호성] search.h에 있는 정렬함수 만들기 (0) | 2013.12.05 |
[4기 대구 하호성] Unity 3D 안드로이드 플러그인 (1) | 2013.12.05 |
[4기 신촌 김형진] 윈도우를 캡쳐하는 서로 다른 두 가지 방법 (0) | 2013.12.05 |
[4기 강북 송용길] Unit test with JUnit(5) (1) | 2013.12.05 |