목록Categories (1104)
KoreanFoodie's Study

C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 1 : 템플릿 형식 연역 규칙을 숙지하라 핵심 : 1. 템플릿 형식 연역 도중 참조 형식의 인수들은 비참조로 취급된다. 즉, 참조성이 무시된다. 2. 보편 참조 매개변수에 대한 형식 연역 과정에서 왼값 인수들은 특별하게 취급된다. 3. 값 전달 방식의 매개변수에 대한 형식 연역 과정에서 const 또는 volatile(또는 그 둘 다인) 인수는 비 const, 비 volatile 인수로 취급된다. 4. 템플릿 형식 연역 과정에서 배열이나 함수 이름에 해당하는 인수는 포인터로 붕괴한다. 단, 그런 인수가 참조를 초기화하는데 쓰이는 경우,..

이득우님의 '이득우의 게임수학' 책을 보며 좋은 내용을 정리하고 있습니다. 더 자세한 내용이 궁금하시다면, 책을 구매해 직접 읽어보시기를 추천드립니다! 행렬을 이용한 회전변환 행렬을 이용해 어떤 물체를 반시계 방향으로 90 도 회전시키는 행렬을 구한다고 생각해 보자. 위의 그림을 보면, 두 벡터가 다음과 같이 변환된다. 표준기저벡터 e1 : (1, 0) -> (0, 1) 표준기저벡터 e2 : (0, 1) -> (-1, 0) 따라서 반시계로 90 도 회전 변환을 수행하는 행렬을 다음과 같이 설계할 수 있다. 시계방향으로 90 도 회전을 하는 경우는 다음과 같을 것이다 : 사실 90 도 회전의 경우는 행렬을 사용하지 않고 간단하게 다음과 같이 구할 수 있다. - 시계 방향으로 90 도 회전 : (x, y) ..

C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 55 : Boo子有親! 부스트를 늘 여러분 가까이에 핵심 : 1. 부스트는 C++ 표준화에 있어 영향력 있는 오픈 소스 C++ 라이브러리 개발 모임이다. 2. 부스트의 다양한 라이브러리를 살펴보자 부스트 라이브러리는 엄격한 심사를 통해 높은 품질의 코드를 제공한다. 예시는 정말 다양한데, 웹사이트를 들어가서 다양한 라이브러리를 구경해 보자!

C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 54 : TR1 을 포함한 표준 라이브러리 구성요소와 편안한 친구가 되자 핵심 : 1. 최초에 상정된 C++ 표준 라이브러리의 주요 구성요소는 STL, iostream, 로케일 등이다. 2. TR1 이 도입되면서 추가된 것은 스마트 포인터, 일반화 함수, 해시 기반 컨테이너, 정규 표현식 등등이다 3. TR1 자체는 단순히 명세서이며, TR1 기능을 사용하기 위해서는 명세를 구현한 코드를 구해야 한다. 대표적인 자료처 중 한 군데가 바로 부스트이다. 사실 해당 책은 현재 시점(2022년) 으로부터 7년 전에 나온 개정판이므로, 책에서 ..

C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 53 : 컴파일러 경고를 지나치지 말자 핵심 : 1. 컴파일러 경고를 쉽게 지나치지 말자. 경고 메시지를 내지 않는 코드를 짜자. 2. 컴파일러 경고에 너무 기대지는 말자! 컴파일러마다 경고 메시지는 달라질 수 있다! 다음 예시를 보자. class B { public: virtual void f() const; }; class D: public B { public: // f 는 재선언된 것이 아니라, 아예 가리고 있음 virtual void f(); }; 컴파일러는 위 경우, "warning: D::f() hides virtual B:..

C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 52 : 위치지정 new 를 작성한다면 위치지정 delete 도 같이 준비하자 핵심 : 1. operator new 함수의 위치지정(placement) 버전을 만들 때는, 이 함수와 짝을 이루는 위치지정 버전의 operator delete 함수도 꼭 만들자. 이 일을 빼먹으면, 찾아내기도 힘들고 생겼다가 안 생겼다 하는 메모리 누출 현상을 경험하게 된다. 2. new 및 delete 의 위치지정 버전을 선언할 때는, 의도한 바도 아닌데 이들의 표준 버전이 가려지는 일이 생기지 않도록 주의하자. 아래 코드를 보자. Widget *pW =..

C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 51 : new 및 delete 를 작성할 때 따라야 할 기존의 관례를 잘 알아 두자 핵심 : 1. 관례적으로, operator new 함수는 메모리 할당을 반복해서 시도하는 무한 루프를 가져야 하고, 메모리 할당 요구를 만족시킬 수 없을 때 new 처리자를 호출해야 하며, 0바이트에 대한 대책도 있어야 한다. 클래스 전용 버전은 자신이 할당하기로 예정된 크기보다 더 큰(틀린) 메모리 블록에 대한 요구도 처리해야 한다. 2. operator delete 함수는 널 포인터가 들어왔을 때 아무 일도 하지 않아야 한다. 클래스 전용 버전의 ..

이득우님의 '이득우의 게임수학' 책을 보며 좋은 내용을 정리하고 있습니다. 더 자세한 내용이 궁금하시다면, 책을 구매해 직접 읽어보시기를 추천드립니다! 극좌표계 우리는 기본적으로 데카르트 좌표계를 많이 이용하는데, 사실 회전을 할 때마다 x 와 y 의 변화를 매번 계산하는 것은 매우 번거로운 일일 수 있다. 이 경우, 원점으로부터의 거리 r 과 θ 의 두 요소로 구성된 극좌표계(Polar coordinate system) 을 사용할 수 있다. 일반적으로 arctan 함수를 이용하면 벡터의 각도를 얻어낼 수 있는데(tanθ = y/x 이므로, θ = arctan(y/x) 이 됨), arctan 함수는 치역이 -180도에서 180도까지 밖에 되지 않는다. 따라서 이를 해결하기 위해, x 와 y 값을 따로 전..

C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 50 : new 및 delete 를 언제 바꿔야 좋은 소리를 들을지를 파악해 두자 핵심 : 개발자가 스스로 사용자 정의 new 및 delete 를 작성하는 데는 여러가지 이유가 있다. 여기에는 수행 성능 향상, 힙 사용 시의 에러 디버깅, 힙 사용 정보 수집 등의 목적이 포함된다. operator new 와 operator delete 를 바꾸는 가장 흔한 세 가지 이유를 한 번 보자. 잘못된 힙 사용을 탐지하기 위해 : 데이터 오버런(overrun) 및 언더런(underrun) 을 탐지하기 위해 탐지용 바이트를 추가로 할당할 수 있다..

C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다! 항목 49 : new 처리자의 동작 원리를 제대로 이해하자 핵심 : 1. set_new_handler 함수를 쓰면 메모리 할당 요청이 만족되지 못했을 때 호출되는 함수를 지정할 수 있다. 2. 예외불가(nothrow) new 는 영향력이 제한되어 있다. 메모리 할당 자체에만 적용되기 때문이다. 이후에 호출되는 생성자에서는 얼마든지 예외를 던질 수 있다. 메모리 할당이 제대로 되지 못했을 때, operator new 는 예외를 던지기 전 사용자 쪽에서 지정할 수 있는 에러 처리 함수를 우선적으로 호출한다. 이 함수를 new 처리자(new-ha..