gpt4 book ai didi

c++ - 为什么这个 C++ 递归模板不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 15:05:33 26 4
gpt4 key购买 nike

我找到了 interesting question 并决定详细检查最佳答案。
我问自己为什么需要结构并尝试在没有结构的情况下重写代码:

#include <iostream>
template <int N> void out(std::ostream& os) {
out<N-1>(os);
os << N << std::endl;
}

template <> void out<1>(std::ostream& os){
os << 1 << std::endl;
}

int main(){
out<100>(std::cout);
}

然后我尝试重构代码。我得到了这样的东西:

#include <iostream>
template <int N> void out() {
if (N != 1) {
out<N-1>();
std::cout << N << std::endl;
}
else {
std::cout << 1 << std::endl;
}
}

int main(){
out<100>();
}

我不明白为什么这段代码不起作用。
有什么想法吗?

最佳答案

问题是 if条件在运行时进行评估。当你到达 N = 1 的实例化时,它不知道 if 的第一个 block 语句不会执行。它继续实例化 out<0>等等。 If we had a static if , 这是可能的,但是 it probably won't happen very soon .

关于c++ - 为什么这个 C++ 递归模板不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com