如果参数的类型为T &&,它是通过move还是通过引用传递的?

问题描述

我希望这不是一个愚蠢的问题,我只是想确保我对此的理解是明确的。

如果RValue引用接收到参数:

struct A { /* move and copy constructors here... */ };
template <class T> void f1(T&&) {

}
void demo()
{
    f1(A());
    f1(std::move<A>(A()));
}

在我看来,它是通过引用传递的,没有应用move构造函数

这是真的吗? 我只是想确保此处没有复制省略或其他优化。

解决方法

正确。只会调用构造函数,使您使用隐式或显式构造新对象的参数进行操作。

演示函数中的第二行是不必要的:A()已经是prvalue。