小编gca*_*lin的帖子

C++17 静态模板惰性求值

考虑以下示例:

#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)

c++ compiler-errors c++17

20
推荐指数
3
解决办法
1172
查看次数

标签 统计

c++ ×1

c++17 ×1

compiler-errors ×1