【问题标题】: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

【问题讨论】:

    标签: c++ language-design c++11


    【解决方案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... 没有被保留,那么添加这样的东西的想法可能会失败,因为新的关键字往往会不受欢迎。 (越少越好。)

    【讨论】:

      猜你喜欢
      • 2014-09-16
      • 2012-05-29
      • 2010-11-26
      • 2010-10-24
      • 1970-01-01
      • 2018-03-30
      • 2011-09-14
      • 2016-03-29
      • 1970-01-01
      相关资源
      最近更新 更多