模板形参不必都是类型。 在调用函数时非类型形参将用值代替,值的类型在模板列表中指定。例如,下面的函数模板声明了array_init是一个含有一个类型模板形参和一个非类型模板形参的函数模板。函数本身接受一个形参,该形参是数组的引用。
模板非类型形参是模板定义内部的常量值 ,在需要常量表达式的时候,可使用非类型形参,例如上述代码来指定数组的长度。当调用array_init时,编译器从数组实参计算非类型形参的值。
[注意]
[1] 非类型模板实参必须是编译时常量表达式 。
[2] 对模板的非类型形参而言,求值结果相同且类型相同的表达式将认为是等价的 。函数模板调用相同的实例 。