在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


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

09-25 19:32