gpt4 book ai didi

c++ - 可变参数模板参数转发

转载 作者:行者123 更新时间:2023-11-30 01:43:28 26 4
gpt4 key购买 nike

假设我有一个函数 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 获取对 args 的左值引用,并将它们作为左值传递给 whatever

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 最初称这些为“通用”引用,但转发引用现在是首选术语。

关于c++ - 可变参数模板参数转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37757739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com