考虑以下示例:
#include<iostream>
template<int n>
struct fibonacci {
static const int value = n < 0 ? 0 : fibonacci<n-1>::value + fibonacci<n-2>::value;
};
template<>
struct fibonacci<1> {
static const int value = 1;
};
template<>
struct fibonacci<0> {
static const int value = 0;
};
int main() {
std::cout << fibonacci<-1>::value << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我熟悉 C++ 中的惰性求值,并且希望在传递参数 < 0 时不会求值 if 语句的第二个分支泛型斐波那契模板。但是,编译代码仍然会导致该分支的无限循环:
Fibonacci.cpp: In instantiation of ‘const int fibonacci<-900>::value’:
Fibonacci.cpp:5:58: recursively required from ‘const int fibonacci<-2>::value’
Fibonacci.cpp:5:58: required from …Run Code Online (Sandbox Code Playgroud)