为什么非类型模板参数不能是字符串?
在 C 中,非类型模板参数必须是常量整型表达式。但是,下面的代码尝试使用 std::string 作为非类型模板参数:
template <std::string temp> void foo() { // ... }
这会导致编译器错误,表明 std::string 对于非类型来说是非法类型类型模板参数。
这个限制的原因是非常量表达式在编译过程中无法被解析和替换。它们可能在运行时发生变化,这需要在运行时生成新模板。由于模板是一个编译时概念,因此这是不可能的。
C 11 标准明确仅允许非类型模板参数的某些类型:
以上是为什么字符串不能用作 C 中的非类型模板参数?的详细内容。更多信息请关注PHP中文网其他相关文章!