这是我当前的代码:
template<int n>
struct N{
static const int k = (n >= 2) ? (1 + N<n-2>::k) : N<0>::k;
};
template<>
struct N<0>{
static const int k = 0;
};
以下编译:
int main(int, char *[])
{
cout << N<2>::k;
getchar();
}
以下不编译:
int main(int, char *[])
{
cout << N<1>::k;
getchar();
}
编译器是否急切地计算 ?: 运算符的正确分支?如果是这样,我怎样才能让它懒惰地评估?