我正在阅读对"不使用循环或条件打印1到1000"的回复,我想知道为什么在最佳答案中需要特殊处理NumberGeneration<1>。
如果我删除它并在模板中添加一个N == 1的检查(如下面的代码),则代码编译失败,并显示“模板实例化深度超过最大值”,但我不确定原因。条件语句在编译时是否有所不同?
如果我删除它并在模板中添加一个N == 1的检查(如下面的代码),则代码编译失败,并显示“模板实例化深度超过最大值”,但我不确定原因。条件语句在编译时是否有所不同?
#include <iostream>
template<int N>
struct NumberGeneration
{
static void out(std::ostream& os)
{
if (N == 1)
{
os << 1 << std::endl;
}
else
{
NumberGeneration<N-1>::out(os);
os << N << std::endl;
}
}
};
int main()
{
NumberGeneration<1000>::out(std::cout);
}