c++ 在方法调用中对这个对象调用std::forward是否有意义(与参数相反)?

xjreopfe  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(129)

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

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

我想这是没有意义的,因为this在方法调用中总是一个指针,所以它是由右值引用还是左值引用组成的没有区别,但是请证实我的直觉或者解释为什么我错了。
以上示例是此代码的简化方法,其中jujufor_eachTExecutionPolicyjajaget_devices

htrmnn0y

htrmnn0y1#

当你在方法中考虑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

相关问题