这个...(三个点)在c ++中是什么意思

man*_*ans 27 c++

这似乎是一个愚蠢的问题,但当我试图在SOF中查看这个答案时,

编译时生成的表

我注意到这样的陈述:

template<
    typename IntType, std::size_t Cols, 
    IntType(*Step)(IntType),IntType Start, std::size_t ...Rs
> 
constexpr auto make_integer_matrix(std::index_sequence<Rs...>)
{
    return std::array<std::array<IntType,Cols>,sizeof...(Rs)> 
        {{make_integer_array<IntType,Step,Start + (Rs * Cols),Cols>()...}};
}
Run Code Online (Sandbox Code Playgroud)

进一步来说 :

std::size_t ...Rs
Run Code Online (Sandbox Code Playgroud)

要么

std::index_sequence<Rs...>
Run Code Online (Sandbox Code Playgroud)

什么......意味着什么?

编辑1

报告为与此问题相关的原始问题的问题不正确:

那个问题不能回答这两种情况(因为它们不是具有可变数量参数的函数)

std::size_t ...Rs
std::index_sequence<Rs...>
Run Code Online (Sandbox Code Playgroud)

但这是一个很好的解释:

https://xenakios.wordpress.com/2014/01/16/c11-the-three-dots-that-is-variadic-templates-part/

Tre*_*vir 21

它被称为参数包,并引用零个或多个模板参数:

http://en.cppreference.com/w/cpp/language/parameter_pack

std::size_t ...Rs
Run Code Online (Sandbox Code Playgroud)

是类型的参数包std::size_t.该类型的变量(例如Rs... my_var)可以通过以下方式解压缩:

my_var... 
Run Code Online (Sandbox Code Playgroud)

此模式大量用于转发(未知)数量的参数:

template < typename... T >
Derived( T&&... args ) : Base( std::forward< T >( args )... )
{
}
Run Code Online (Sandbox Code Playgroud)

  • 但为什么我们需要“转发(未知)数量的参数”? (2认同)
  • @Henry例如,获取命令行参数。另外, printf 使用它。 (2认同)