발췌 : 이펙티브 C++
template<unsigned n>
struct Factorial {
enum { value = n * Factorial<n - 1>::value };
};
template<>
struct Factorial<0> {
enum { value = 1 };
};
TMP 구조로 작성된 팩토리얼 코드.
Factorial<n> fact;
std::cout << fact.value << std::endl;
* unsigned로 처리 시 32bit / 64bit 상관없이 17!에서 오버플로우, 18!에서부터 (VS기준) C4308 에러코드 발생
18!를 넘는 수를 계산할 수 있게 하려면 어떻게 해야하는지 연구가 필요해보임.
'프로그래밍 > C/C++' 카테고리의 다른 글
포인터 변수 사용시 데이터 오염 문제 (0) | 2020.11.28 |
---|---|
Const 키워드. (0) | 2020.08.18 |
오늘의 실수. (0) | 2020.03.29 |
Visual C++에서 C++ 버전확인하는 방법. (3) | 2020.02.27 |
Jsoncpp 라이브러리 사용 관련 (0) | 2020.01.01 |