为了账号安全,请及时绑定邮箱和手机立即绑定

非类型模板参数

非类型模板参数

C++
回首忆惘然 2019-08-02 14:20:05
非类型模板参数我知道非类型模板参数应该是一个常量整数表达式。有人可以解释为什么会如此?template <std::string temp>void foo(){     // ...}error C2993: 'std::string' : illegal type for non-type template parameter 'temp'.我理解常量积分表达式是什么。不允许非常量类型的原因是什么,如std::string上面的代码片段?
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

你不能这样做的原因是因为在编译时不能解析和替换非常量表达式。它们可能在运行时期间发生变化,这需要在运行时生成新模板,这是不可能的,因为模板是编译时的概念。

这是标准允许非类型模板参数的内容(14.1 [temp.param] p4):

非类型模板参数应具有以下之一(可选的cv限定)类型:

  • 积分或枚举类型,

  • 指向对象或指向函数的指针,

  • 左值引用对象或左值引用函数,

  • 指向成员的指针,

  • std::nullptr_t


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 483 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信