【发布时间】:2019-03-23 19:51:44
【问题描述】:
让T 是任意类型。考虑一个接受const [lvalue] 引用的函数:
void f(const T &obj);
假设该函数在内部调用另一个函数,该函数具有右值引用重载:
void g(T &&obj);
如果我们将右值传递给f,是否会调用g 的右值引用重载,或者由于它已“转换”/绑定到const 左值引用而无法调用?
类似地,如果f 调用了一个函数,该函数按值获取T 的实例,
void h(T obj);
而T有一个移动构造函数,(即T(T &&);),是调用移动构造函数,还是调用复制构造函数?
总之,如果我们想确保在对右值调用f 时,右值引用被传递并保持其右值“状态”,我们是否必须为f 提供右值引用重载?
【问题讨论】:
标签: c++ move-semantics rvalue-reference pass-by-const-reference