设为T
任意类型。考虑一个采用const
[lvalue] 引用的函数:
void f(const T &obj);
假设此函数在内部调用另一个函数,该函数具有右值引用重载:
void g(T &&obj);
如果我们将 rvalue 传递给f
,是否会调用 rvalue 引用重载g
,还是会因为它已“转换”/绑定到const
左值引用而无法调用?
类似地,如果f
调用一个T
按值获取实例的函数,
void h(T obj);
并且T
有一个移动构造函数(即T(T &&);
),将调用移动构造函数,还是调用复制构造函数?
总之,如果我们想确保在调用f
右值时,传递右值引用以保持其右值“状态”,我们是否必须提供右值引用重载f
?