例子:
template<typename... Type>
void function(Type&&... args)
{
/* code */
}
我知道它们是什么parameter pack,rvalue reference它们是如何工作的。但我也知道它不仅仅是parameter pack+ rvalue reference,而且rvalue它在这里有一个非常不同的上下文。但是在cppreference.com其他地方或其他地方,我没有找到关于它为什么以及如何工作以及它甚至被称为什么的详细解释。我将不胜感激有关此未记录的“奇迹”的信息,该“奇迹”并不少见。
PS:我发现了一些有趣的东西,直接来自第 14 个标准:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4164.pdf
考虑这段代码:
void foo( X&& x );
template<class Y>
void bar( Y&& y );
这些参数根本不同。
这是一个转发参考。您可以在此处和此处阅读有关它们的信息,即 有据可查。参数包与它无关,即 如果你写
那么这也是一个转发参考。
它主要用于理想地将参数传递给与 结合使用的函数,此处
std::forward也记录了这一点。也就是说,如果你传递一个文字,那么它将是,如果你传递一个对整数的引用,那么它将是。否则,您将不得不为这两种情况编写 2 个重载。42int&&int&