gpt4 book ai didi

c++ - 当 const 引用参数绑定(bind)到它时,右值是否保留其 "status"?

转载 作者:搜寻专家 更新时间:2023-10-31 00:25:42 27 4
gpt4 key购买 nike

T 为任意类型。考虑一个接受 const [左值] 引用的函数:

void f(const T &obj);

假设此函数在内部调用另一个具有右值引用重载的函数:

void g(T &&obj);

如果我们将右值传递给 fg 的右值引用重载是否会被调用,还是因为它已被“转换”而无法执行/绑定(bind)到 const 左值引用?

类似地,如果 f 调用了一个按值获取 T 实例的函数,

void h(T obj);

T都有 move 构造函数,(即T(T &&);),是调用 move 构造函数,还是调用复制构造函数?

总而言之,如果我们想确保在对右值调用 f 时,右值引用被传递以保持其右值“状态”,我们是否必须提供右值引用重载对于 f?

最佳答案

值类别应用于表达式,而不是对象。 objf是左值表达式,因此将被视为左值表达式。注意 objg 也是一个左值表达式;如果表达式是一个对象的名称,那么它就是一个左值。

您所谈论的能力正是存在转发引用的原因:因此可以通过函数调用保留参数表达式值类别的复制/move 方面。 f必须成为 template<typename T> void f(T&& t); 形式的模板, 你将不得不使用 std::forward传递给 g 时.

关于c++ - 当 const 引用参数绑定(bind)到它时,右值是否保留其 "status"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55317741/

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