可变参数模板的论点

说我有一个foo()利用c ++可变参数模板功能的功能。现在,这些实现之间有什么区别:

template <typename... Args>
void foo(Args... args) {
whatever(args...);
}

template<typename... Args>
void foo(Args&... args) {
whatever(args...);
}

template<typename... Args>
void foo(Args... args) {
whatever(&args...);
}

template<typename... Args>
void foo(Args&&... args) {
whatever(std::forward<Args>(args)...);
}
提姆
template <typename... Args>
void foo(Args... args) {
    whatever(args...);
}

foo得到拷贝args,并将它们传递到whatever作为左值。

template<typename... Args> 
void foo(Args&... args) {
     whatever(args...);
}

foo获取L值引用args并将其whatever作为L值传递给

template<typename... Args>
void foo(Args... args) {
    whatever(&args...);
}

foo得到拷贝args,并将它们传递到whatever作为指针指向左值。在这里要注意对象的生命周期。

template<typename... Args>
void foo(Args&&... args) {
    whatever(std::forward<Args>(args)...);
}

foo获取对的转发引用args它们是左值还是右值取决于呼叫站点发生的情况。然后将它们完美地转发到whatever,以保留其引用类型。斯科特·迈耶斯(Scott Meyers)最初将这些称为“通用”引用,但现在转发引用是首选的术语。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章