为啥 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... 运算符?的主要内容,如果未能解决你的问题,请参考以下文章