关于可变参数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的主要内容,如果未能解决你的问题,请参考以下文章