首页 > 代码库 > [013]模板-非类型模板参数

[013]模板-非类型模板参数

在模板中,除了定义类型参数,我们还可以定义非类型参数。例如:

temlate<unsigned N, unsigned M>int foo(const char (&p1)[N], const char (&p2)[M]) {    return strcmp(p1,p2);}

但是需要注意的是:编译器会在一个字符串字面常量的末尾插入一个空字符作为终结符。

例如我们调用

foo("hi", "mom");

实际上编译器会实例化如下版本

int foo(const char (p1)[3], const char (p2)[4]);

-----------

总结:在模板定义内,模板非类型参数是一个常量值。在需要常量表达式的地方,可以使用非类型参数,例如指定数组的大小等。

[013]模板-非类型模板参数