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);
热门推荐
10 财运虎年祝福语简短语
11 单亲爸爸春节祝福语简短
12 狗狗上厕所训练
13 植物种植祝福语简短
14 翻译考试祝福语朋友简短
15 个人周年庆简短祝福语
16 狗狗怎么训练
17 分别祝福语简短搞笑英文
18 生日广州男生祝福语简短