非类型模板参数和常量积分表达式
非类型模板参数是自定义模板的宝贵工具,但为什么它如此重要它们是常数积分表达式?
考虑以下内容代码:
template <std::string temp> void foo() { // ... }
编译此代码会产生错误:
error C2993: 'std::string' : illegal type for non-type template parameter 'temp'.
非类型模板参数必须是常量整型表达式,因为它们在编译期间求值。这允许直接生成代码而无需运行时评估。像 std::string 这样的类型可以在运行时更改,但不能在编译时替换。
标准规定非类型模板参数只能是以下类型:
通过将非类型模板参数限制为编译时常量值,编译器可以在编译时,确保程序的行为可以在运行时之前完全确定和优化。
以上是为什么非类型模板参数必须是常量整数表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!