为什么称它为"非类型"模板参数?

Kar*_*ath 14 c++ templates non-type

在C++模板术语中,我们有非类型模板参数,类型模板参数和模板模板参数(然后是带参数的相同列表).

为什么称它为非类型?这不是一个价值吗?不应该是"价值模板参数"吗?

如果我将它们视为值模板参数,我会错过任何内容吗?

注意:出于好奇,我检查了D语言的文档,他们称之为值.

小智 12

"value"在C++中有一个非常具体的非直观定义,不一定适用于非类型模板参数:

3.9类型[basic.types]

4 类型对象的对象表示是由类型对象占据TN个 unsigned char对象的序列T,其中N等于sizeof(T).对象的值表示是保存type值的位集T.对于简单的可复制类型,值表示是对象表示中的一组位,用于确定,该是实现定义的值集的一个离散元素.

尽管C++标准偶尔会非正式地使用"价值"这个词,但他们在这里没有这样做是件好事.非类型模板参数类型不需要是可轻松复制的.具体来说,正如Mike Seymour对此问题所评论的那样,它可能是一种参考类型.

也就是说,我觉得我应该注意到我不认为术语"非类型模板参数"是正确的.它曾经是,但我们现在有模板模板参数,它们不是类型,但也不是非类型模板参数.

  • @didierc说实话,我不知道我是否完全正确地阅读它,但在我看来,*值表示*实际上是*对象表示*中有助于该值的那些位(即那些位)这不是填充). (3认同)