게임학원, 게임프로그래머 취업 전문 교육기관 DirectX11/12 자체엔진 게임개발과정,서버프로그래밍,자료구조,알고리즘,유니티,언리얼 게임학원, 언리얼학원 Effective C++ 항목3 낌새만 보이면 const를 들이대 보자!
본문 바로가기

Effective C++ 항목3 낌새만 보이면 const를 들이대 보자!

항목 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,