是否将纯右值移动到函数模板 uref 参数中?

Move a prvalue into function template uref argument or not?

我的问题是将纯右值 std::move(或不)放入一个包罗万象的函数模板中是否有意义,该模板相应地在其签名中采用通用引用 T&&。另外我想知道复制移动 elision/RVO 是否在这个决定中发挥了作用。

问题: 将引用折叠导致 foo 被调用与 T&& (右值引用)或 w/o std::move 并且 RVO 是否对此有任何影响(或对 RVO 的影响)?

template < typename T >
void foo(T&& arg)
{
    //Whatever..
}

A func()
{
    A m;
    return m;
}

// called anywhere you like
foo(std::move(func()));

提前致谢 山姆

move 除了让编译器、优化器和您代码的读者做更多无意义的工作外,没有任何效果。

不要这样做。