std::forward 到底解决什么问题?
它解决的是:
函数模板中不能判断传进来的参数到底是左值还是右值。
#include <iostream>
#include <functional>
void foo(const std::string& s) {
std::cout << "lvalue\n";
}
void foo(std::string&& s) {
std::cout << "rvalue\n";
}
template <typename T>
void wrapper(T&& arg) {
//foo(arg); // ⚠️ 不论传左值右值,这里永远当左值
foo(std::forward<T>(arg)); // 完美!
}
int main() {
std::string s = "abc";
wrapper(s); // 你希望调用左值版本
wrapper(std::string("hello")); // 你希望调用右值版本
wrapper("hello"); // 你希望调用右值版本
}
1118

被折叠的 条评论
为什么被折叠?



