非类型模板参数


非类型模板参数

我知道非类型模板参数应该是一个常量整数表达式。有人可以解释为什么会如此?


template <std::string temp>

void foo()

{

     // ...

}

error C2993: 'std::string' : illegal type for non-type template parameter 'temp'.

我理解常量积分表达式是什么。不允许非常量类型的原因是什么,如std::string上面的代码片段?


回首忆惘然
浏览 484回答 3
3回答

哈士奇WWW

你不能这样做的原因是因为在编译时不能解析和替换非常量表达式。它们可能在运行时期间发生变化,这需要在运行时生成新模板,这是不可能的,因为模板是编译时的概念。这是标准允许非类型模板参数的内容(14.1 [temp.param] p4):非类型模板参数应具有以下之一(可选的cv限定)类型:积分或枚举类型,指向对象或指向函数的指针,左值引用对象或左值引用函数,指向成员的指针,std::nullptr_t。
打开App,查看更多内容
随时随地看视频慕课网APP