전체 글
-
ch01-03. const 들이대기 2effective c++ & c++ 2022. 8. 31. 21:33
상수 멤버 함수 해당 멤버 함수가 상수 객체에 의해 호출될 함수임을 의미. 상수 멤버 함수의 의미 1. 물리적 상수성(=비트 수준의 상수성) 2. 논리적 상수성 물리적 상수성(=비트 수준의 상수성) 어떤 멤버 함수가 그 객체의 어떤 데이터 멤버도 건드리지 않아야 정적 멤버 함수임을 인정. 컴파일러는 테이터 멤버에 대입 연산의 수행 여부만 파악하면 된다. class CTextBlock { private: char* pText; public: char& operator(size_t pos) const { return pText[pos]; } }; ... const CTextBlock cctb("Hello"); char *pc = &cctb[0]; *pc = 'J'; // 물리적 상수성은 만족하지만 멤버함수 ..
-
ch 01- 03 . const 들이대기1effective c++ & c++ 2022. 8. 29. 18:51
const와 포인터 const가 *표 왼쪽에 있으면 "포인터가 가리키는 대상"이 상수 = hello라는 내용을 변경할 수 없음. char greeting[] = "hello"; const char * p = greeting; // char const * p = greeting; 도 동일한 의미 const가 *표 오른쪽에 있으면, "포인터 자체"가 상수 = p가 가리키는 주소를 변경할 수 없음. char greeting[] = "hello"; char * const p = greeting; container 컨테이너와 iterator 반복자 컨테이너(Container) - 다른 객체들을 보관하는 하나의 커다란 보관소 - 클래스 템플릿 형태로 구현되어 있기 때문에 임의의 타입 원소들을 담을 수 있다. - 자..
-
ch01. 가급적 선행 처리자 보다 컴파일러를 활용하자.effective c++ & c++ 2022. 8. 25. 19:43
#define ASPECT_RATIO 1.653 ASPECT_RATIO라는 기호식 이름은 컴파일러에게 넘어가기 전에 선행 처리자(Pre Processor)가 밀어버리고 숫자 상수로 바꾸어 버리기 때문에 ASPECT_RATIO라는 이름은 컴파일러의 기호 테이블에 들어가지 않는다. 따라서 숫자 상수로 대체된 코드에서 컴파일 에러가 나면 파악이 어려워지기 때문에, const double AspectRatio = 1.653; 과 같이 상수를 사용해 주는 것이 좋다. 상수로 쓰게 되면, 1. 변수명이 컴파일러의 기호 테이블에 입력된다. 2. 상수가 부동 소수점 실수 타입일 경우, 컴파일을 거친 최종 코드의 크기가 #define을 썼을 때보다 작게 나올 수 있다. -> #define으로 선언하게 되면 ASPECT_..