키워드에 대한 이야기다. 재미있는 것은 왜 이런 생각을 하냐는 것이다. 일반적으로 키워드야 컴파일러가 분석하는데, 사용하는 단어 쯤으로 생각 해도 무리가 없다. 뭐 더 있는가? 키워드 자체가 키워드일 뿐이다. 질문을 통해서 무엇을 생각해 봐야 할지 알아 보자. 1 ) 대부분의 프로그래밍 언어들이, 키워드들을 예약해 두고 프로그램의 식별자로는 사용하지 못하게 하는 이유는 무엇일까? 간단하다. 컴파일러의 파싱을 보다 빠르게, 보다 확실하게 하기 위해서이다. 만약 키워드를 함수나 변수로 쓰게 되면, 이 경우가 키워드인지, 함수인지, 변수인지를 판별하는 로직도 무수히 만들어야 할 것이다. C++의 키워드들 asm, auto, bool, break, case, catch, char, class, const, co..
Exceptional C++ Style 검색 결과
항목 26 에서 체스의 플레이 데이터를 저장하는데, 각 바이트마다 쓸수 있는 것을 생각해 보았다. 그런데 이해가 되지 않는것이 마지막 12 비트를 기록하는 방법이다. 이번 항목은 그 방법들에 대해서 논하는 것이다. 최소한의 인터페이스는 다음과 같을 것이다. class BitBuffer { public: // p의 첫번째 비트로부터 num개의 비트들을 추가한다. void Append( unsigned char *p, size_t num ); // 실제로 쓰이는 비트 개수를 조회한다. size_t Size() const; // start 번째의 비트부터 num 개의 비트들을 얻고, // 그것들을 dst의 첫 번째 비트부터 저장한다. void Get( size_t start, size_t num, unsign..
1 ) 표준 컨테이너 deque, list, set, vector가 데이터를 적재하기 위해, 얼마나 추가비용을 부담해야 하는가? 참조 : http://ikpil.com/817 2 ) 월드와이드 체스 서버를 만들고, 각 경기의 플레이를 저장한다고 하자. 플레이어의 이름이나 기타 부수적인 것을 저장하는것이 아닌, "플레이 자체"를 저장하는 것에만 초점을 맞추고, 이 데이터를 저장하기 위해 얼만큼의 메모리가 필요 할까? 전제로 반수씩 기록한다. 플레이어 정보(이름, 승패 등...)는 제외시킨다. 1 바이트당 8비트로 한다. 체스판은 세로(row)8줄 : 1 ~ 8 가로(col) 8줄 : a ~ h 이다. 유닛은 킹,퀸,루크,비숍,나이트,폰, 이 있다. 플레이어는 두명이다. a. 반수 하나 당 128 바이트 이..
인라인을 완전 파해치는 항목이다. 1 ) 인라인화란 무엇인가? 함수를 코드로 직접 대체하는 행위, 라고 정리해도 될 듯 싶다. 이런 행위 때문에, 함수 호출 비용이 없어 진다. 참조 : http://ikpil.com/762 2 ) 인라인화는 언제 수행되는가? a. 코딩 시점에서? 코딩 시점에서, 프로그래머가 inline 을 지정해 주면서 수행 된다. 코딩 시점에서 inline 키워드를 집어 넣으려면, 세 가지 염두해야할 것이 있다. 첫째, .. 우선 하지 말아야 한다. 둘째, inline 키워드는 컴파일러의 허락을 받아야 한다. 셋째, 인라인화 발생지점을 예측하지 말아야 한다. 셋째 부연 설명 : 인라인화 자체는 함수가 아닌 함수 호출에 대해서 일어난다. 그래서 어떤 지점에서 인라인화 되고, 어떤 지점에..
const에 대한 잘못된 믿음으로, "컴파일러가 const 객체를 상수 비트로 올려 최적화를 시킨다." 라는 믿음이 있다. 이번 항목에선 "왜 이런 믿음이 생겼는지?", "어떤 경우에는 안되는지?" 에 대해서 이야기 한다. 알다시피 질문을 통해 접근해 보도록 한다. 1 ) 다음 코드에서 class X { private: int a; int b; int c; }; class Y { private: int a; int b; int c; }; const Y& f( const X& x ) { // ... x에 대해 뭔가 수행하고 Y 객체 하나를 찾는다. Y someY; return someY; } int main( void ) { X x; f( x ); return 0; } 매개변수나 반환값 또는 둘 다를 co..
1 ) 메모리가 충분하지 않을 경우 표준 형태의 new들이 오류를 보고하는 두 가지 주된 방식들을 설명하라. 표준형태 하나는 std::bad_alloc 예외를 던지는 방법과, 예외를 던지지 않고, NULL을 리턴하는 방법, 이렇게 두가지가 있다. 2 ) 예외를 던지지 않는 nothrow 형태의 new가 좀더 예외에 안전한 코드를 작성하는 데 도움이 될까? 근거와 함께 답하라. 나는 도움이 된다고 생각한다. 왜냐하면, NULL 을 반환하게 되었을 때, 처리하지 않고, 지나가면 되기 때문이다. 하지만 이 근거를 곰곰히 생각해 보면, 필요한 메모리를 잡는게 오류가 났는데, 어떻게 정상적으로 프로그램이 구동 될 수 있겠냐는 오류를 범한 것이다. 이 NULL 이 반환하게 되었을 때, 곰곰히 생각해 보면, 나는 할..
최근댓글