我有以下代码:模板编译错误 - 标准与否?
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
int k = 1000;
foo<k>();
return 0;
}
根本不能编译,但是如果我宣布k
为const
,它的作用:
template<int k>
void foo()
{
}
int main(int argc, char* argv[])
{
const int k = 1000;
foo<k>();
return 0;
}
现在,我看到背后的逻辑,为什么在第一它不会编译,在第二种情况下,它是由标准规定的?
我得到的错误是:
Error 1 error C2971: 'foo' : template parameter 'k' : 'k' : a local variable cannot be used as a non-type argument
这是不完全清楚,因为k
是一个局部变量也是它的const
的情况下,对吧?
你没有具体说明为什么'k'能在一个而不是另一个中工作,这是问题的关键。 – GManNickG
请参阅粗体部分。该标准表示该表达式必须是恒定的。 –
但我再重复一遍自己:你没有解释为什么'k'可用或不可用。 – GManNickG