Is it possible to std::move objects out of functions? (C++11)

后端 未结 2 1385
我在风中等你
我在风中等你 2020-11-27 22:26

This program tries to move a string out of a function and use it for the construction of another string:

#include 
#include 
#i         


        
2条回答
  •  一向
    一向 (楼主)
    2020-11-27 22:48

    That Get_String function binds an rvalue reference to a function-local object. Rvalue references are useful for things that are about to be destroyed, but just as bad as lvalue references for things that have already been destroyed.

    To move a local object out of a function, you just return by class type:

    std::string Get_String(void) {
        std::string str{"hello world"};
        return str;
    }
    

    If the compiler doesn't manage to eliminate the copy/move entirely, then the return value that the caller gets will be constructed using a move constructor, not a copy constructor, as long as the return expression is:

    • a temporary, or
    • a single identifier naming something with automatic storage duration (like str above), or
    • std::move(something)

    (So you could still have return std::move(str); to be explicit, but it's not necessary here.)

提交回复
热议问题