【发布时间】:2016-06-26 18:40:00
【问题描述】:
以下是《C++ Primer 5th edition》一书的节选(重点是我的):
非类型参数可以是整数类型,也可以是指针或(左值) 对对象或函数类型的引用。绑定到 a 的参数 非类型整数参数必须是常量表达式。 参数 绑定到指针或引用的非类型参数必须具有静态 终生(第 12 章,第 450 页)。我们不能使用普通的(非静态的) 本地对象或动态对象作为模板参数供参考 或指针非类型模板参数。指针参数也可以 由 nullptr 或零值常量表达式实例化。
在这一段的正下方可以找到这个突出显示的注释:
用于非类型模板参数的模板参数必须是 常量表达式。
也许我遗漏了一些东西,但我认为注释是错误的,因为指向对象或函数类型的指针或左值引用的非类型模板参数不是常量表达式。
【问题讨论】:
-
也许我遗漏了什么是的,
const等等……没有理由不能将指针硬编码到一个函数等。跨度> -
什么是"指向对象或函数类型的指针或左值引用的非类型模板参数不是常量表达式" 它们可能既是const又是非常量表达式,取决于您如何声明/定义它们。要将它们用作模板非类型参数,您必须将它们用作 const 表达式
-
如果我对您的理解正确,您会担心
foo<&obj>。但是,您发布的引用指出:绑定到指针或引用非类型参数的参数必须具有静态生命周期 -
@chris 指向静态对象的指针可以被视为常量表达式吗?
标签: c++ templates pointers reference