有人可以向我解释一下,为什么第一个模板元编程方式将进入无限循环,而第二个模板正确运行。
#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;
}
3
模板元编程中“三元运算符
—
LF
目标是使用模板元编程。
—
Exxul
constexpr
不是一个选择。
添加了c ++ 98标记以使之成为显式
—
MSalters
constexpr
选项。(它是在C ++ 11中引入的)。那确实使现有答案无效。Exxul,请明确说明您限于哪个C ++版本。
抱歉,我删除了标签。
—
Exxul