非类型模板参数我知道非类型模板参数应该是一个常量整数表达式。有人可以解释为什么会如此?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
。
- 3 回答
- 0 关注
- 483 浏览
添加回答
举报
0/150
提交
取消