为啥 C++0x 中有 sizeof... 运算符?

Posted

技术标签:

【中文标题】为啥 C++0x 中有 sizeof... 运算符?【英文标题】:Why is there a sizeof... operator in C++0x?为什么 C++0x 中有 sizeof... 运算符? 【发布时间】:2010-05-05 06:22:55 【问题描述】:

我看到@GMan 为可变参数模板实现了a version of sizeof...,它(据我所知)相当于内置的sizeof...。这不违背第二个设计原则:prefer libraries to language extensions

【问题讨论】:

【参考方案1】:

来自Variadic Templates (Revision 3) (N2080=06-0150),第 6 页:

虽然不是绝对必要的(我们可以在没有此功能的情况下实现count),检查参数包的长度是一种常见的操作,需要一种简单的语法。此外,当可变参数模板与概念结合时,出于类型检查的原因,此操作可能变得必要;请参阅第 3.3 节。

(第 3.3 节讨论了现在无关紧要的概念。)

【讨论】:

sizeof... 也同样适用于模板和函数参数包。所以sizeof...(T)sizeof...(t) 工作得同样好。我相信,基于库的解决方案可以与模板或函数参数包一起使用,但不能同时与两者一起使用。因为一个扩展产生一系列类型,而另一个扩展产生一系列表达式。也许将其写为template<size_t...> struct count;,然后将包传递为count<sizeof(T)...> 可以工作。由于sizeof 可以处理看似可行的类型和表达式,但它显然更丑:)【参考方案2】:

sizeof... 只是糖,我想。

sizeof... 一样确实是语言的核心,虽然countof 函数可能存在,但我们已经保留了sizeof...,所以我们不妨方便地获取计数那样。

相反,如果sizeof... 没有被保留,那么添加这样的东西的想法可能会失败,因为新的关键字往往会不受欢迎。 (越少越好。)

【讨论】:

以上是关于为啥 C++0x 中有 sizeof... 运算符?的主要内容,如果未能解决你的问题,请参考以下文章

为啥“sizeof(a ? true : false)”会给出四个字节的输出?

一个物体有多大?为啥没有sizeof? [复制]

c malloc,为啥我的数组中有随机数? [复制]

为啥这个 sizeof(c+a) 给出 4 字节而不是 3

C语言中,sizeof运算符有啥作用?

在 C 中,为啥 sizeof(char) 为 1,而 'a' 是 int?