Effective Modern C++ (스콧 마이어스, 2015) 독후감
다시 C++을 만지게 됐다. 책장에 꽂혀 있던 ’Effective Modern C++’ 책을 다시 읽었다. 예전에 읽었던 것 같은데, 새롭고 놀랐다. 나보다 더 깊이 생각한다. 여기까지 설명하겠지 하면서 읽다 보면 예상한 것보다 한 발짝 더 깊이 들어가서 설명한다. 스콧 마이어스 ...
다시 C++을 만지게 됐다. 책장에 꽂혀 있던 ’Effective Modern C++’ 책을 다시 읽었다. 예전에 읽었던 것 같은데, 새롭고 놀랐다. 나보다 더 깊이 생각한다. 여기까지 설명하겠지 하면서 읽다 보면 예상한 것보다 한 발짝 더 깊이 들어가서 설명한다. 스콧 마이어스 ...
forwarding reference(universal reference)가 있게 한 제안서(proposal)다. std::forward() 함수를 보면 생각날 문서다.
양 정말 많다. 번역본을 사고 싶었는데, 들고 다니면서 볼 엄두가 안 났다. 그래서 kindle로 사서 읽었다.
DO name interfaces with adjective phrases, or occasionally with nouns or noun phrases. Nouns and noun phrases should be used rarely and they might...
warning level 4로 만든 프로젝트는 총 3개다. 모두 덩치가 있는 게임 프로젝트였다. 크고 지루한 작업이었다. 하나를 제외하곤. 드물게 엔진이 level 4였다.
vec3 calc_respawn_position(...);
(column-number-mode 1) (column-number-mode)
```c++ template struct CompileTimeError; template<> struct CompileTimeError {};
C++ incomplete type is not allowed class inner use?
템플릿 만으로 이만큼 분량을 뽑아낼 수 있구나. 자세한 설명으로 템플릿 내공을 쌓는데 그만이다.
윈도우 하부구조를 알려주는 책. 프로세스, 스레드, 동기화 오브젝트, 메모리 관리, DLL, IOCP 등을 자세히 다룬다.
글 주소는 http://www.viva64.com/en/l/
Object* object = NULL; if (object && object->IsValid()) { // ... }
STL에는 auto_ptr라는 스마트 포인터가 있지만 할당하면 소멸식 복사(destructive copy)로 자원에 대한 소유권을 넘겨주는 동작을 한다. STL 알고리즘은 값에 의한 복사가 기본 동작이라서 컨테이너에 못 넣는 스마트 포인터가 되겠다. 이게 이슈가 많이 돼서 이름도 ...
```c++ class RVO { public: RVO() { PrintLine(“constructor”); } RVO(const RVO& rhs) { PrintLine(“copy constructor”); } ~RVO() ...
```c++ class Base { public: Base() { WriteLine(“Base::Base()”, typeid(this).name()); f(); } void f() { WriteLine(...
사실 style guide가 나와서 말인데, 나는 조엘이 엄선한 소프트웨어 블로그 베스트 29선에서 본 ’스타일은 언어 요소다 - 켄 아놀드’글을 완전 지지한다. 많은 언어가 무시하는 공백 문자를 언어 요소로 넣자고 주장하는데, 지겨운 스타일 논쟁을 완전 없앨 수 있고 파싱이 쉬워...
목적은 Construct On First Use와 같다. 즉, global static object, global object 초기화 순서가 명확하지 않아서 발생하는 static initialization order fiasco를 막기 위한 idiom이다.
global static object, global object 가 사용되기 전에 초기화되는 걸 보장하는 idiom이다.
포팅을 위해 64bit로 빌드를 하면 갑자기 담배가 급하게 땡기게 된다. 수백 개의 에러를 보면 “어휴~ 이걸 언제 다 잡지?”라는 생각이 절로 든다. 하지만 다 저마다 독특한 상황에서 발생하는 에러가 아니라 에러는 수백 개라도 공통된 패턴이 있기 마련이다. viva64.com에 ...
계산한 값을 메모리에 저장해서 여러 번 같은 값 계산을 피하는 최적화 기법을 메모이제이션(memoization)이라고 한다. 실행 속도와 공간을 바꾸는 가장 기초적인 기법이기도 하다. 실수로 메모리제이션이라고 하기도 하는데 메모이제이션이 정확한 용어이다.
PerfHUD나 DirectX Caps Viewer로 볼 수 있지만, 비디오 메모리 사용량을 렌더링하는 게 그리 힘든 일이 아니라 보통 이 정도는 렌더링해준다. 그건 좋은데 문제는 DirectX9 인터페이스로는 사용 가능한 전용 비디오 메모리를 알 수 없는 거다. 그래서 보통 Di...
컴파일할때 파일 간의 디펜던시를 줄이려고 사용하는 관용구(idiom)이다. public 접근 권한으로 정의된 함수가 변경될 때, 이 파일을 include 하는 녀석들이 다시 컴파일되는 건 당연한데, 다른 녀석들이 못 보는 private 접근 권한의 멤버 함수나 변수가 변경될 때도 ...
사용자 입력은 서식화된 입력(공백 문자 무시 등)이 필요하지만 파일 입출력에서는 서식화된(formatted) 입력이 필요 없는 경우가 대부분이다. 서식화된 입출력은 쌩 입출력보다 처리를 하는 게 많아서 속도가 느린 게 당연하다. 공백 문자 무시 옵션을 켜도 되지만 이런 서식화 입출...
두 값이 같은가를 판단하는 두 가지 방법이 존재한다. 첫 번째 방법은 두 값이 같은지를 바로 판단하는 것이고 두 번째 방법은 작지도 않고 크지도 않다는 것을 확인해서 두 값이 같은지를 판단한다. 이 첫 번째 방법은 operator== 로 판단하는데, A == B 이면 두 값이 같다...
transform(), copy() 알고리즘과 같이 연산을 하거나 단순 복사를 하는 알고리즘을 사용할 때, 결과물을 쓰기 위한 반복자(iterator)를 함수 인자로 받는다. operator = 로 값을 쓰기 때문에 결과물을 특정 컨테이너 뒤에 삽입하려면 귀찮은 과정을 거쳐야 한다...
O(logN)으로 수행되는 바이너리 검색(binary search)이다. 물론 바이너리 검색 알고리즘의 전제 조건인 정렬된 순서를 보장해야 하므로 원소들이 정렬된 컨테이너에서만 제대로 동작한다.
함수 어댑터(function adaptor)?!
Effective STL 항목 15에서 string이 여러 가지 방식으로 구현되어 있다는 걸 상기시키고 있다. 구현 방법까지 표준 문서에 정의하지 않았기 때문에 당연한 결과이기도 하다. VS 2005에 포함된 딩컴웨어 STL은 어떻게 구현되었나 궁금해서 찾아봤다.
STL 알고리즘 이름의 _if 접미사는 술어 함수(predicate)를 인자로 받는 것을 의미한다. 이 술어 함수를 알고리즘 안에서 호출해서 돌려받은 반환 값에 따라 동작을 수행할지 말지를 결정하게 된다. 예를 들면 count_if()는 술어 함수 호출결과가 true인 원소들의 개...
컨테이너 정렬이 필요할 때, sort를 사용하고 순서가 유지돼야 하면 stable_sort를 사용했다. partial_sort와 nth_element는 한 번도 사용해본 적이 없는데, 일부분만 정렬이 필요하거나 몇 번째 원소를 뽑을 때 유용하게 사용할 수 있을 것 같다. 예를 들면...
변태적인 복사 동작을 하는 스마트 포인터다. 꼭 필요한 경우가 아니라면 레퍼런스 카운팅을 하는 스마트 포인터를 사용하자.
for_each 알고리즘으로 대체 구현이 가능한 거라 한 번도 사용해보지 않은 알고리즘이다. Effective STL 37번 항목에서 accumulate알고리즘에 대한 언급이 나오는데, 으.. 읽고 보니 좋은 걸 안 쓰고 있었구나.
predicate 발음듣기 [미] [prédikət] 【문법】 술부, 술어 (cf. SUBJECT) 【컴퓨터】 술어 구글 사전
CQS는 간단하게 설명하면 멤버 변수를 변경하는 동작과 멤버 변수 값을 반환하는 동작 중 하나의 동작으로만 멤버 함수를 구현하는 원칙이다. 양다리는 금지.
```c++ class CCAImage { protected: void SetSnapRegion(int x, int y, int dx, int dy); };
파티션을 나눠서 응용 프로그램들을 D 드라이브에 설치하는데, 프로그램 파일 패스가 “C:\Program Files”로 세팅되어 있어서 설치할 때마다 Home –> Del -> D 콤보로 드라이브 명을 바꿔서 설치했다. 웹 서핑하던 중에 레지스트리를 수정해 프로그램 파일 ...
NOOP 혹은 NOP 로 사용하는데, NO OPerator의 줄임말이다. 말 그대로 아무런 연산을 하지 않는 명령어를 뜻한다. 표준이 아니라 VC++ 키워드라는 게 걸리는데, 다른 컴파일러에서 동작하도록 쉽게 수정할 수 있으니 포팅 걱정은 안 하고 VC++에서 편하게 써도 된다. ...
EASTL - Electronic Arts Standard Template Library은 거대 게임 개발사인 EA가 C++ 표준 라이브러리인 STL을 게임 개발에 맞게 수정한 라이브러리이다.
웹 서핑 중에 간단히 잘 정리된 사이트를 찾아서 가물가물 하던 터에 한번 정리해봤다.
```c++ #include #include #include
Win32 console application에서 Unicode 문자를 표준 출력을 통해 출력하려고 한다. 그러나 console window가 Unicode를 지원하지 않는 문제점이 있다. 이런 문제점을 해결하려면 locale 설정을 한 후 출력을 한다.
2판이 있는데, 목차를 살펴보니 새로 추가된 내용이 많아서 샀다. 상당히 많은 부분이 추가 되었고 내용들도 수정되고 추가 되었다. TR1에 대한 소개도 추가되었고 템플릿쪽에 대한 얘기가 늘어났다. 두번째로 보는 C++ 책이라 불리는 책이니 책에 대한 다른 칭찬의 말은 필요도 없을 ...
The conversion truncates; that is, the fractional part is discarded. 4.9 Floating-integral conversions, ISO/IEC 14882
Suppose you’re on a game show, and you’re given the choice of threedoors: Behind one door is a car; behind the others, goats. You pick adoor, say No. 1, a...