항목 3: 낌새만 보이면 const를 들이대 보자!
const : 의미적인 제약(const 키워드가 붙은 객체는 외부 변경을불가능 하게 한다.)
어떤 값이 불변이어야 한다.
라는 제작자의 의도를 컴파일러 및 다른 프로그래머에게 보일 수 있다.
1. const int* pNumber; //상수 데이터
2. int const *pNumber; //상수 데이터
3. int* const pNumber; //상수 포인터
주의) 1번과 2번은 같은 형식입니다.
const POINT operator* (const POINT& lhs, const POINT& rhs )
반환값을 상수화를 한다면
실수를 예방할 수 있습니다.
ex)
POINT tPosA, tPosB, tPosC;
if( (tPosA * tPosB) = tPosC)
사실을 비교를 하려고 하였지만 ==를 =로 오타를 낸 케이스입니다.
반환타입이 상수가 아니었다면 컴파일 오류가 나지 않았겠지만 컴파일오류가 납니다.
조건식을 사용할 때 상수를 왼쪽에 두게끔 습관을 들이는 것이 실수를 예방할수 있습니다.
if(iNumber == 10) 보다는 if(10 == iNumber) 이런식으로 말이지요
상수 멤버 함수
멤버 함수에 붙는 const 키워드의 역할
- 해당 멤버 함수가 상수 객체에 대해 호출될 함수이다.
중요한이유
1. 클래스의 인터페이스를 이해하기 좋게 하기 위해서
2. 이 키워드를 통해 상수 객체를 사용할수 있게 하자.
const 키워드가 있고 없고의 차이만 있는 멤버 함수들은 오버로딩이 가능하다.
이 처럼 말이지요
이제 코드를 보며 말해볼게요
어떤 맴버 함수가 상수 멤버라는 것
1. 비트수준 상수성(물리적 상수성)
- 어떤 멤버 함수가 그 객체의 어떤 데이터 멤버도 건드리지 않아야(정적 멤버 제외) 그 멤버 함수가 const임을 인정하는 개념
어떤 포인터가 가리키는 대상을 수정하는 멤버 함수들 중 상당수가 이런 비트수준 상수성검사를 통과 한다는 점 때문에 논리적 상수성이라는 개념이 나오게 되었습니다.
책에 나온 예제를 컴파일러 v120버전에서 돌려보았는데 컴파일 오류를 통해 잡아주는 모습을 보여주었습니다.
2. 논리적 상수성
일부 몇 비트 정도는 바꿀 수 있되, 그것을 사용자측에서 알아채지 못하게만 하면
상수 멤버 자격이 있다
mutable 키워드로 멤버 함수에서 수정할 수 있는 멤버를 제공 한다는 점.
상수 멤버 및 비상수 멤버 함수에서 코드 중복 현상을 피하는 방법
비상수버전이 상수버전을 호출하게 만든다
요렇게 말이죠
const_cast<char&>( static_cast<const CTextBlock&>(*this)[pos] )
게임프로그래머 취업 전문 교육기관 어소트락 게임아카데미
교대역 / 강남역 근처 프로그래밍 학원
태그 :
게임학원, 게임프로그래밍학원, 컴퓨터학원, 자료구조, 알고리즘,
유니티, 언리얼, unity, unreal
게임,프로그래밍,게임프로그래밍,학원,게임학원,게임프로그래밍학원,프로그래밍학원,게임제작,취직,취업,게임취직,게임취업,게임개발자,게임프로그래머,프로그래머,c언어,mfc,유니티,언리얼,unity,unreal,포트폴리오,게임포트폴리오,게임포트폴리오제작,Direct,DirectX,과외,프로그래밍과외,게임프로그래밍과외,서버,서버프로그래머,서버프로그래밍,게임서버,게임서버프로그래머,게임서버프로그래밍,Game,GameProgramer,게임교육,게임프로그래밍교육,게임프로그래밍교육원,게임프로그래머교육,프로그래머교육,쉐이더,hlsl,자바,c++,API,WinApi,assortrock,졸업작품,졸작,게임졸업작품,게임졸작,졸업작품제작,졸작제작,게임졸업작품제작,게임졸작제작,엔진,게임엔진,엔진제작,엔진프로그래머,게임엔진프로그래머,게임엔진제작,툴,tool,mfc툴,c#,java,교대,서초,강남,vr,ar,증강현실,가상현실,assort rock,어소트락,win32,디퍼드,림라이트,그림자,쉐도우,애니메이션,랜즈,데드레커닝,obb,oop,리지드바디,인벤토리,상점,rpg,슈팅,퍼즐,온라인,3d,2d,스프라이트,타일맵,쿼터뷰,카메라,lod,쿼드트리,트리,벡터,행렬,회전,총알,쿼터니언,hdr,트레일,이펙트,소프트 파티클,오클루전,커스터마이징,염색,패치,채팅,퀘스트,svn,
'정보 & 소식 > C, C++' 카테고리의 다른 글
동적할당 (0) | 2019.02.28 |
---|---|
nullptr 구현하기 전격 해부 (0) | 2017.03.07 |
Effective C++ 항목2 #define을 쓰려거든 const, enum, inline을 떠올리자 (0) | 2016.11.03 |
Effective C++ 항목1 C++를 언어들의 연합체로 바라보는 안목은 필수 (0) | 2016.11.03 |
Effective C++<챕터1>C++에 왔으면 C++의 법을 따릅시다 (0) | 2016.10.21 |