필자는 C++ 코드에서 이상한 메타 기능 동작이 있으며 그 이유를 알고 싶습니다. C++ : 이상한 메타 함수 호출
#include <iostream>
#include <cmath>
inline double f(double x, double y)
{
std::cout<<"Marker"<<std::endl;
return sqrt(x*y);
}
template <int N, class T> inline T metaPow(T x)
{
return ((N > 0) ? (x*metaPow<((N > 0) ? (N-1) : (0))>(x)) : (1.));
}
int main()
{
double x;
double y;
std::cin>>x;
std::cin>>y;
std::cout<<metaPow<5>(f(x, y))<<std::endl;
return 0;
}
나는 줄
metaPow<5>(f(x, y))
이
f(x, y)*f(x, y)*f(x, y)*f(x, y)*f(x, y)*1.
동등이라고 예상했다. 하지만 그랬다면
f
함수에 "
Marker
"줄을 5 번 인쇄 할 것입니다.
이상한 것은
내가 말 (x = 2
및
y = 4
예를 들어
181.019
용)에서 좋은 결과를 가지고있다 그러나 나는 단지 1 "
Marker
"표시가 있습니다. 그게 어떻게 가능해 ? 따라서 표준 pow() 대신 컴파일 타임 최적화에 해당 함수를 사용하는 것이 좋습니다.
대단히 감사합니다!