C ++ const string非模板参数

时间:2016-03-18 15:23:17

标签: c++

在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?

2 个答案:

答案 0 :(得分:6)

来自C ++ 11标准:

  

14.1模板参数

     

...

     

4非类型模板参数应具有以下之一(可选 cv-qualified )类型:
   - 整数或枚举类型,
   - 指向对象的指针或指向函数的指针,
   - 对象的左值引用或函数的左值引用,
   - 指向成员的指针,
   - std::nullptr_t

因此,您不能将类用作非类型模板参数。

答案 1 :(得分:1)

int是合法的,因为编译器知道int。另一方面,String不是内置的C ++数据类型。它在头文件库中定义。常量“hello”是一个字符数组,而不是String()