【发布时间】:2020-03-20 21:57:24
【问题描述】:
谁能给我解释一下,为什么使用模板函数的第一个调用陷入了无限循环,而第二个编译时函数运行正常?
#include <iostream>
using namespace std;
template<int N, int M>
struct commondivs {
static const int val = (N<M) ? commondivs<N,(M-N)>::val : commondivs<(N-M),M>::val;
};
template<int N>
struct commondivs<N,N> {
static const int val = N;
};
int commondiv(int N, int M){
if(N==M){
return N;
}
return (N<M)?commondiv(N,(M-N)):commondiv((N-M),M);
}
int main() {
cout << commondivs<9,6>::val << endl;
cout << commondiv(9,6) << endl;
return 0;
}
【问题讨论】:
-
目标是使用模板元编程。
constexpr不是一个选项。 -
添加了 c++98 标记以明确表明
constexpr不是一个选项。 (它是在 C++11 中引入的)。这确实使现有答案无效。 Exxul,请说明您仅限于哪个 C++ 版本。 -
对不起,我删除了标签。
标签: c++ templates template-meta-programming