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