关于可变参数varargs

Posted manch1n

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于可变参数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

以上是关于关于可变参数varargs的主要内容,如果未能解决你的问题,请参考以下文章

Chez Scheme 中的 FFI,用于具有可变参数 (varargs) 的 C 函数

java可变参数Varargs

Java Varargs 可变参数使用

Kotlin 使用vararg可变参数

帮介绍一下C语言里的varargs。

Java 可变参数列表