在C ++中,以下是合法的:
template <int i>
run(){...}
run<3>(); // legal
const int j=3;
run<j>(); // legal because j is const
为什么以下是合法的或不合法的?
template <String s>
run(){...}
run<"hello">(); // legal or illegal?
const string s="hello";
run<s>(); // legal or illegal?
最佳答案
从C ++ 11标准:
14.1模板参数
...
4非类型模板参数应具有以下(可选的,通过cv限定)类型之一:
—整数或枚举类型,
—指向对象或函数的指针,
—对对象的左值引用或对函数的左值引用,
—指向成员的指针,
— std::nullptr_t
。
因此,您不能将类用作非类型模板参数。