Kar*_*ath 14 c++ templates non-type
在C++模板术语中,我们有非类型模板参数,类型模板参数和模板模板参数(然后是带参数的相同列表).
为什么称它为非类型?这不是一个价值吗?不应该是"价值模板参数"吗?
如果我将它们视为值模板参数,我会错过任何内容吗?
注意:出于好奇,我检查了D语言的文档,他们称之为值.
小智 12
"value"在C++中有一个非常具体的非直观定义,不一定适用于非类型模板参数:
3.9类型[basic.types]
4 类型对象的对象表示是由类型对象占据
T的N个unsigned char对象的序列T,其中N等于sizeof(T).对象的值表示是保存type值的位集T.对于简单的可复制类型,值表示是对象表示中的一组位,用于确定值,该值是实现定义的值集的一个离散元素.
尽管C++标准偶尔会非正式地使用"价值"这个词,但他们在这里没有这样做是件好事.非类型模板参数类型不需要是可轻松复制的.具体来说,正如Mike Seymour对此问题所评论的那样,它可能是一种参考类型.
也就是说,我觉得我应该注意到我不认为术语"非类型模板参数"是正确的.它曾经是,但我们现在有模板模板参数,它们不是类型,但也不是非类型模板参数.