我正在阅读一篇关于非类型模板参数的文章,它说:
实例化时,只能传递编译时常量整数。这意味着100
,100+99
等1<<3
是允许的,因为它们是编译的时间常数表达式。abs(-120)
不允许使用涉及函数调用的参数,例如。
例子 :
template<class T, int SIZE>
class Array{};
int main(){
Array<int, 100+99> my_array; // allowed
Array<int, abs(-120)> my_array; // not allowed
}
100+99 和 abs(-120) 有什么区别?
为什么 100+99 是编译时间而 abs(-120) 不是?