Introduction 코드 리뷰를 하다가 if문이 많을 수록 코드 분석을 더 힘들게 한다는 사실을 알게 되었다. 그러던 중 if문을 고의로 없애버리는 코드를 작성하기 시작했는데, 문득, 성능도 더 좋을까? 라고 생각하는 찰나에 테스트 코드를 만들고 테스트 해보았다. content 하는 일은 같으나, 한쪽은 if문이 있고, 한쪽은 if문이 없다. 하는 일은 현재 나이를 저장한 변수가 초기화 나이까지 되었을 때, 0으로 리셋 해 주는 일이다. #include #include int main( void ) { boost::timer t0; const int reset_age = 100; int my_age = 0; int loop_count = 1000000000; t0.restart(); // case 1..
2010/01 검색 결과
Introduction C++ 컴파일러가 템플릿을 인스턴스화 하는 규칙을 설명하고 있다. 이 규칙은 무척 많은 세부사항으로 이루어져 있다. 각 세부사항들을 알아 본다. Content 1. 템플릿은 두 단계 룩업을 한다. 템플릿 코드는 템플릿을 파싱 할 때, 1차 룩업을 하고, 인스턴스화가 될 때 2차 룩업을 하여, 이름을 찾는다. 1차 룩업을 할 땐, 일반적인 룩업(영역에서 이름 찾기)과 ADL(인자 이름으로 이름 영역 끌고 오기)를 한다. 2차 룩업을 할 땐, 종속된 이름에서 룩업을 하고, 한정되지 않은 이름을 위해서 ADL이 추가로 수행 된다. .. 이 말의 무슨 말이고 하면, 코드를 보자. // ikpil.com class NoTempalte { int notemplate_field; // 1 };..
Introduction 1부에선 "주문형 인스턴스화"를 통해, 언제 인스턴스화가 필요한지 알게 되었다면, 게이른 인스턴화 부분에선 좀 더 세부적으로 인스턴스화 되는 시기를 정리한다. 여기서 말하는 세부적이란, 기존에선 인스턴스화 자체에 대해서 이야기 했다면, 이 부분은 템플릿 코드의 내부 요소, 즉 클래스 템플릿의 멤버들이 언제 인스턴스화 되는지 정리 되었다는 것을 의미한다. Content 게으른 인스턴스화 코드를 보고 규칙을 파악하는게 더 빠르므로, 예제코드(책에서 발취)를 첨부하고 하나씩 정리해 보겠다. template class Safe { }; template class Danger { public: typedef char Block[N]; }; template class Tricky { publ..
Introduction 이번 장은 템플릿이 언제 어떻게 실체화 되는지에 대해서 정리한 것이다. 이것을 알아야 하는 이유는 "템플릿의 가시화가 되지 않았기 때문에 컴파일이 되지 않는다" 라는 직관을 길르기 위해서이다. 총 5 파트의 정리가 있는데, 이번 파트에선 "주문형 인스턴스화" 만을 정리 한다. Content 주문형 인스턴스화 우선 "인스턴스화 : instantiation" 이 어떤 단어인지 정의 해야 한다. 이 것은 실체화 라고 이해 하면 된다. C++ Template 에선 템플릿 코드가 실체화 되는 것을 인스턴스화 : instantiation 라고 한다. 여기서 말하는 주문형은, 프로그래머가 요구한 주문에 대해서 인스턴스화 되는 것을 뜻한다. - 원어가 어떻게 되어 있는지는 못찾겠다. : | 쉽게..
Introduction 클래스 템플릿이 다른 클래스 템플릿을 상속 할 경우, 무엇을 주의 하라는지 설명 하고 있다. 클래스 템플릿을 상속 하고 잘못 사용 했을 경우, "가상 함수"가 제 역활을 못할 수 있거나, 컴파일 자체가 되지 않을 수 있으므로, 이 부분은 꼭 봐야 할 것이다. Content 시작하기에 앞서, 한가지 사실을 미리 알아두어야 한다. 바로 기반이 되는 클래스 템플릿이 파생 되는 클래스 템플릿에 기입 된 파라미터에 종속 될 경우와 종속되지 않을 경우, 이름을 찾는 규칙이 변화 한다는 사실이다. 이 두 경우 중 종속되지 않을 경우(기반 클래스 템플릿이 파생 클래스 템플릿에 기입된 템플릿 파라미터에)가 더 적은 규칙을 가지고 있으므로, 이를 먼저 정리하겠다. 1. 종속되지 않은 기반 클래스일 ..
최근댓글