首页 > 解决方案 > 如果参数是 T&& 类型,它是通过移动还是通过引用传递的?

问题描述

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

如果 RValue 引用接收到参数:

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

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

在我看来,它是通过引用传递的,并且没有应用移动构造函数。

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

标签: c++move-semanticsrvalue-reference

解决方案


正确的。构造函数只被调用,你用隐式或显式构造一个新对象的参数做一些事情。

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


推荐阅读