gpt4 book ai didi

c++ - (c++23 隐式 move ) 将 move 的本地存储变量作为仅带括号的右值引用返回?

转载 作者:行者123 更新时间:2023-12-04 12:15:28 25 4
gpt4 key购买 nike

关于“更简单的隐式 move ”(P2266R1)提案,我不确定我是否正确理解了这个新的“符合 move 条件”的东西。
如果不正确,请更正以下几点:
[ LIVE ]

  • std::forward成为完美转发收到的右值引用的 optional

  • template<class T>
    T&& seven(T&& x) { return std::forward<T&&>(x); }
    变成
    template<class T>
    T&& seven(T&& x) { return x; }
  • std::move成为本地创建的右值引用的可选

  • Widget&&
    test_seven(Widget w) {
    Widget&& rr = seven(std::move(w));
    return std::move(rr);
    }
    变成
    Widget&&
    test_seven(Widget w) {
    Widget&& rr = seven(std::move(w));
    return rr;
    }
  • std::move可选变成 parenthesis only为本地创建的事物返回一个右值引用。

  • Widget&& h3(Widget t) {
    return std::move(t);
    }
    变成
    Widget&& h3(Widget t) {
    return (t);
    }
    注意:(3):在我发布这篇文章时,clang trunk 警告返回本地堆栈地址。

    更新 2021-08-02
    https://github.com/cplusplus/papers/issues/968#issuecomment-915353127
    https://isocpp.org/files/papers/P1018R13.html#P2266r1
    投票结果:✅ 共识。但是,反对票来自实现者,并带来了相关的新信息。这个话题需要重新讨论,并且可能无法通过全体投票。

    最佳答案

    这三点都是正确的。在所有情况下,所讨论的变量都是一个隐式可 move 实体(如果用左值实例化 seven 除外),因此被视为 xvalue。
    这里的括号:

    Widget&& h3(Widget t) {
    return (t);
    }
    实际上什么都不做。如果函数返回 decltype(auto),他们会这样做- 从那时起没有括号,函数将返回 Widget (但仍然 move t ,而不是复制它)。

    关于c++ - (c++23 隐式 move ) 将 move 的本地存储变量作为仅带括号的右值引用返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68342632/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com