gpt4 book ai didi

c++ - 在方法调用中是否有在该对象上调用 std::forward 的感觉(与参数相反)?

转载 作者:行者123 更新时间:2023-12-02 17:56:46 25 4
gpt4 key购买 nike

我想知道 std::forward 这里是否有意义。

template <class T>
void juju(T && x) {
std::forward<T>(x).jaja();
}

我猜它没有任何意义,因为 this 始终是方法调用中的指针,因此无论它是由右值还是左值引用组成,都没有区别。但请确认我的直觉或解释为什么我错了。

上面的示例是简化的 method from this code其中 jujufor_eachTExecutionPolicyjajaget_devices .

最佳答案

当您在方法中考虑 this 时,您的速度太快了。在调用成员方法之前,需要进行重载决策。左值和右值引用可以有不同的重载:

#include <utility>
#include <iostream>


template <class T>
void juju(T && x) {
std::forward<T>(x).jaja();
}

struct foo {
void jaja() & { std::cout << "hello\n";}
//^
void jaja() && { std::cout << "&&\n";}
//^^
};

int main(){
juju(foo{});
foo f;
juju(f);
}

Output :

&&
hello

关于c++ - 在方法调用中是否有在该对象上调用 std::forward 的感觉(与参数相反)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75509096/

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