首页 > 技术文章 > [013]模板-非类型模板参数

hustcser 2014-10-20 16:01 原文

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

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]);

-----------

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

推荐阅读