이번 항목에선 inline을 언제 사용 해야 되는지에 대한 논쟁이다. 대부분 inline을 과용 하고 있어, 문제가 될 소지가 많이 있다고 허브셔터는 지적한다. 허브 셔터는 3개의 질문을 통해서 한번 생각해 보라고 한다. 1. inline이 하는 일은? 함수를 inline으로 만들면 컴파일러는 함수가 쓰이는 곳마다 함수의 코드를 직접 복사해서 붙인다. 이렇게 되므로써, 컴파일러는 함수 호출 코드를 만들지 않고 함수를 마음껏 실행 할 수 있다. 2. inline 함수를 만들면 효율성이 높아지나? 꼭 그런 것만은 아니다. 만약 여기서 "무엇을 최적화 하려 하는가?"를 질문하지 않았다면, 바로 함정에 빠진것이라고 한다. 왜냐하면 inline의 효율은 함수 호출 비용만 줄여 줄 수 있을 뿐이기 때문이다. a )..
템플릿 검색 결과
C++ 에서 함수의 기본 매개변수를 정하는 방법이 있다. 그 방법은 대부분 알고 있으므로 패스하고, C++ 템플릿 매개변수도 "기본 템플릿 매개변수"가 있다는 것만 알고 잇으면 된다. 이야기 진행 상 밑에서 설명 한다. C++ 템플릿은 함수 템플릿과 클래스 템플릿, 이 두개에서 템플릿을 구사 할 수 있는데, 기본 템플릿 매개변수는 클래스 템플릿에서만 적용이 된다. 어떻게 기본 템플릿 매개변수를 사용 할 수 잇는가? 예제코드 template class DefaultTemplateParameter { }; 그 사용 방법은 C++ 함수와 똑같다. 이렇게 만든 클래스 템플릿의 경우, C++ 함수 기본 매개변수와 같이, 생략되어서 사용 될 경우, 기본적으로 정해준 매개변수에 의하여 초기화가 이루어 진다. 총평 따..
함수 템플릿의 경우 템플릿 매개변수가 함수의 인자에서 추론 될 수 있음을 알게 되었다. 이 추론 때문에, 함수 오버로딩이란 기능을 이용하기 위해선, 몇가지 규칙을 이해하고 있어야 하는 리스크가 있다. 물론 함수 템플릿을 사용 하는것에 비하면 아무것도 아니지만...우선 코드를 보고, 어느게 호출 될지 생각해 보자. #include template T sqrt( T ); template T std::complex sqrt( std::complex ); double sqrt( double ); void f( std::complex z ) { sqrt( 2 ); sqrt( 2.0 ); sqrt( z ); } 13, 14, 15 라인에서 어떤 함수가 호출 될 것이라고 생각 하는가? 13 라인에선 맨 위의 함수 템..
시작하기 앞서 한가지 중요한 사실을 짚어 본다면 " 함수 템플릿에서 템플릿 매개변수는 함수의 인자에 의해서 추론 된다" 를 알고 있어야 할것 같다. 이 추론 될 수 있음으로 추론 되는 방법을 알아야 되기 때문이다. 이 추론 되는 방법은 함수 오버로딩과 깊은 연관이 있으며, 어떤 함수를 호출할지도 판별하게 되기 때문이다. 우선 컴파일러는 함수 호출 문을 보고, 템플릿 매개변수와 매칭을 시키는데, 이때 함수의 인자가 함수의 템플릿 매개변수를 모두 사용 할 때, 인자를 템플릿 매개변수로써 판별 할 수 있다. 만약 템플릿 매개변수를 함수의 인자로 모두 사용 하지 않는 다면, 명시적으로 에 넣어 주어야만 한다. 이 함수 템플릿과 클래스 템플릿의 큰 차이는 바로 이 추론에 있다. 함수 템플릿은 인자로 추론하여, 템..
다음 문구는 비야네 스트롭 스트룹의 "The C++ Programming Language"의 13장, 템플릿의 처음 부분의 것을 인용한 것이다. " '개념(concept)'이라 하는 것은 그 자체의 독립성이 보장될 때는 독립적으로 표현되어야 마땅하며, 다른 개념과 결합시키려면 나음대로의 합당한 이유가 있어야 한다. 이것은 원칙이며, 이 것이 깨진다면, 이상한 개념들의 뭉치와 불필요한 의존구조만이 난무한 산업폐기물만이 하나 더 추가 될 뿐이다. " 또한 다음과 같이 마무리 한다. " 독립과 결합, 이 두 가지를 어떻게 선택하든지 둘 중 하나라도 지키지 않으면, 소프트웨어 구성에 필요한 구성요소를 선택하는 데 있어서 상당 부분의 융통성을 잃게 된다는 것을 확실하다. C++ 에는 이런 문제에 대한 해결책을 가..
템플릿 인스턴스화 시점이 템플릿 매개변수를 넘겨서, 그 템플릿이 사용 되어질 때라고 정리 했었다. 그렇다면 "매개변수"란? 도데체 무엇일까? 일반 함수의 매개변수는 매개변수 타입의 값이다. 그렇다면 템플릿 매개변수의 타입은 무엇이 있을까? 두가지로 정할 수 있는데, 한가지가 바로 C++에서 타입으로 인정되는 것이 매개변수 타입 중 1개 이고, 컴파일 타임에 인식 될수 있는 상수형 값 이 마지막 타입이 된다. 정리 하자면, 1. C++ 에서 인정되는 타입 2. C++ 에서 컴파일 타임에 인식되는 값 이 두가지가 템플릿 매개변수가 된다. C++ 에서 타입으로 인정 되는게 무엇일까? int, unsinged int 등등등 기본 타이과 사용자 타입, 그리고 템플릿 타입이 있다. 템플릿 타입은 역시 템플릿이 사용..
최근댓글