【问题标题】:Move a prvalue into function template uref argument or not?是否将prvalue移动到函数模板uref参数中?
【发布时间】:2018-01-23 22:34:06
【问题描述】:

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

问题: 引用折叠是否会导致 foo 被 T&&(右值引用)调用,带有或不带 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()));

提前致谢 山姆

【问题讨论】:

  • 从了解main() 返回的内容开始...无论如何,这是一个模糊的问题或一组问题,我不敢相信 (A) 它还没有被回答或 ( B)你不能为它编写自己的测试。
  • 我只是想强调一个具有主要功能的范围。重点在于通话和究竟发生了什么。无论如何,如果这有助于专注于这个问题,我会更正它。
  • 是的,这更多是理论上的。我想知道应该发生什么,因此会发生什么,而不是我的特定编译器在做什么。这对我来说纯粹是研究,因为我不确定我是否正确理解了事件链。如果你不想帮忙,没关系。但也许其他人是。而我发现的现有主题还无法消除我的疑虑。

标签: c++11 move-semantics forwarding-reference prvalue


【解决方案1】:

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

别这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2011-04-30
    • 1970-01-01
    相关资源
    最近更新 更多