先说结论:
示例:
先看一个简单的示例,注意他们的输出结果
#include <iostream>
void Print(int &a) {
std::cout << "int&: " << a << std::endl;
}
void Print(int &&a) {
std::cout << "int&&: " << a << std::endl;
}
template<typename T>
void move_func(T &&a) {
Print(std::move(a));
}
template<typename T>
void forward_func(T &&a) {
Print(std::forward<T>(a));
}
int main() {
int arg = 10;
move_func(arg); /* arg is an lvalue */
// int&&: 10
move_func(25); /* 25 is an rvalue */
// int&&: 25
forward_func(arg); /* arg is an lvalue */
// int&: 10
forward_func(25); /* 25 is an rvalue */
// int&&: 25
return 0;
}