#cpp Short-circuit evaluation - 결과 뻔한데 뒤에 인자까지 평가할 필요 없지 뭐
Object* object = NULL; if (object && object->IsValid()) { // ... }
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이다.
계산한 값을 메모리에 저장해서 여러 번 같은 값 계산을 피하는 최적화 기법을 메모이제이션(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
Unicode 문자 개수 구하기.
UTF-8 문자의 크기는 그림과 같이 1-byte에서 4-byte까지 가질 수 있다. 가장 큰 특징인 기존 US-ASCII와 호환성을 위해 이런 가변 길이 인코딩을 선택했는데, 덕분에 영어는 1-byte로 표현할 수 있지만 한글은 3-byte가 필요하다. 외국인이 쓰는 US-ASC...
Windows에서 Unicode 인코딩은 UTF-16을 기본으로 사용하고 Unicode라고 부르기보다는 wide character라고 부른다. 그래서 Windows에서 wide character는 UTF-16 character라고 생각하면 된다. wide character 자료형인...
Win32 console application에서 Unicode 문자를 표준 출력을 통해 출력하려고 한다. 그러나 console window가 Unicode를 지원하지 않는 문제점이 있다. 이런 문제점을 해결하려면 locale 설정을 한 후 출력을 한다.
Debugging시 Watch창으로 내부 변수들을 볼 수 있다. 위의 그림은 IDirect3DDevice9를 Watch창으로 본 화면. 어휴! 역시 DirectX 새로운 SDK 나오면 무조건 Document부터 다 훑어봐야 한다. 발견한 지 일주일이 안 됐지만 그전부터 사용 가능한...
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...