발췌 : 이펙티브 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

+ Recent posts