C++ 参数转发
示例
模板可以使用转发引用接受左值引用和右值引用:
template <typename T>void f(T &&t);
在这种情况下,t将根据上下文推导的实型:
struct X { };X x;
f(x); // calls f<X&>(x)
f(X()); // calls f<X>(x)
在第一种情况下,将类型T推导为对X(X&)的引用,而类型的t则为对的左值引用X,而在第二种情况下,T将推导为X的类型将int作为对X(X&&)的右值。
注意:值得注意的是,第一种情况decltype(t)与相同T,但第二种情况则不同。
为了完美地转发t到另一个函数,无论是左值引用还是右值引用,都必须使用std::forward:
template <typename T>void f(T &&t) {
g(std::forward<T>(t));
}
转发参考可以与可变参数模板一起使用:
template <typename... Args>void f(Args&&... args) {
g(std::forward<Args>(args)...);
}
注意:转发引用只能用于模板参数,例如,在以下代码中,它v是一个右值引用,而不是转发引用:
#include <vector>template <typename T>
void f(std::vector<T> &&v);
以上是 C++ 参数转发 的全部内容, 来源链接: utcz.com/z/330652.html