gpt4 book ai didi

c++ - 在临时对象上调用方法

转载 作者:行者123 更新时间:2023-11-28 04:08:54 24 4
gpt4 key购买 nike

我有一个重载方法的类。根据对象的生命周期,将调用给定的方法。

如何为临时对象调用 fun 实现?我认为 std::move() 将其参数转换为右值。你能告诉我为什么下面的代码不能按预期工作吗?

template <typename T>
void fun(T&& arg) {
arg.callamethod();
}
class TestCall {
private:

public:
void callamethod() && {
std::cout << "R VALUE REF" << std::endl;
}

void callamethod() const & {
std::cout << "CONST L VALUE REF" << std::endl;

}

void callamethod() & {
std::cout << "L VALUE REF" << std::endl;
}
};


int main() {
TestCall arg = TestCall();
const TestCall arg2 = TestCall();
fun(arg);
fun(arg2);
fun(std::move(arg)); // calls callamethod() &
fun(std::move(arg2)); // calls callamethod() const &
}

最佳答案

将函数 fun 更改为以下代码,您将看到方法 callamethod 上的右值限定符按预期工作。

template <typename T>
void fun(T&& arg) {
std::forward<T>(arg).callamethod();
}

注意最后一次调用:

fun(std::move(arg2));

解析为 callamethodconst lvalue 选项,因为您没有const rvalue 限定符选项,如果您添加一个,它将转到它。

关于c++ - 在临时对象上调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58226014/

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