关于可变参数varargs

  今天在看源码的时候,面对以下有点蒙蔽,在这里对可变参数做一下总结。

  主要理解取自一个博客,c版本的:https://www.cnblogs.com/bettercoder/p/3488299.html

示例输出如下:

  

更多详细解释请看: http://www.cplusplus.com/reference/cstdarg/va_arg/?kw=va_arg

c++中的TMP:

 主要参考c++primer  page:618-624 (当时觉得应该用不上这么魔幻的操作就跳过了 QAQ)

术语:

  可变数目的目的参数被称为参数包(parameter packet)

  模板参数包(template parameter packet)

  函数参数包(function parameter packet)

template <typename T,typename... Args>
void foo(const T& t, const Args& ... rest)
{
    std::cout << sizeof...(Args) << endl;
    std::cout << sizeof...(rest) << endl;
}

int main()
{
    foo(1, 2, 3, 4, 5, 6, 7, 8);
    system("pause");
    return 0;
}

都输出了7。

更高级的std::forward保证了模板传参时原来是右值的参数仍为右值,而不会变成左值。

详细如下:http://www.cplusplus.com/reference/utility/forward/?kw=forward

猜你喜欢

转载自www.cnblogs.com/manch1n/p/10804070.html