我知道非类型模板参数应该是一个常量整数表达式。有人可以阐明为什么会这样吗?
template <std::string temp>
void foo()
{
// ...
}
error C2993: 'std::string' : illegal type for non-type template parameter 'temp'.
我明白什么是常数积分表达式。在上面的代码段中不允许像 std::string
这样的非常量类型的原因是什么?
原文由 Mahesh 发布,翻译遵循 CC BY-SA 4.0 许可协议
您不能这样做的原因是因为在编译时无法解析和替换非常量表达式。它们可能会在运行时发生变化,这需要在运行时生成新模板,这是不可能的,因为模板是一个编译时概念。
以下是标准允许的非类型模板参数(14.1 [temp.param] p4):