为什么std::make_tuple(7 + N..)在c++ 11中是合法的?

Why is std::make_tuple(7 + N...) legal in C++11?

本文关键字:c++ make std tuple 为什么      更新时间:2023-10-16

下面的代码在c++ 11中是合法的

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

这是什么意思?

首先,查看模板参数:template <int ... N>。尽管可以给f提供可变数量的模板参数,但它们都必须是int类型的。

现在,当您使用f<t1, t2, ..., tn>时,解压(7 + N...)的参数将遵循模式 7 + N并展开为

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

因此,您最终得到一个元组,其中包含每个模板参数增加7。详细信息可以在章节14.5.3可变变量模板[temp.variadic]中找到。

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