代码之家  ›  专栏  ›  技术社区  ›  xmllmx

为什么std::make_tuple(7+N…)在C++11中合法?

  •  21
  • xmllmx  · 技术社区  · 10 年前

    以下代码在C++11中是合法的。

    template<int... N>
    std::tuple<decltype(N)...> f()
    {
        return std::make_tuple(7 + N...); 
    }
    

    这是什么意思?

    1 回复  |  直到 10 年前
        1
  •  25
  •   Zeta    10 年前

    首先,查看模板参数: template <int ... N> 。即使可以为 f ,它们都必须是类型 int .

    现在,当您使用 f<t1, t2, ..., tn> 这个 parameter unpacking (7 + N...) 将遵循 图案 7 + N 并扩展到

    7 + t1, 7 + t2, 7 + t3, ..., 7 + tn
    

    因此,您最终得到一个元组,其中每个模板参数都增加了七个。详情见第14.5.3节变量模板[temp.Variadic]。

    3.包扩展由模式和省略号组成,省略号的实例化在列表[…]中生成模式的零个或多个实例。