相关疑难解决方法(0)

auto &&告诉我们什么?

如果您阅读的代码如下

auto&& var = foo();

where foo是按类型值返回的任何函数T.然后var是左值类型的左值引用T.但这意味着var什么呢?这是不是意味着,我们被允许窃取资源var?是否有任何合理的情况,您应该使用auto&&告诉读者您的代码与您在返回时unique_ptr<>告诉您拥有独占所有权时的行为?例如什么T&&时候T类型?

我只是想了解,如果有任何其他用例auto&&比模板编程中的用例; 喜欢这篇文章中的例子中所讨论的那些通用参考斯科特迈尔斯.

c++ auto c++11 forwarding-reference

153
推荐指数
2
解决办法
4万
查看次数

是否可以将std :: move对象移出函数?(C++ 11)

该程序试图将一个字符串移出一个函数并用它来构造另一个字符串:

#include <iostream>
#include <string>
#include <utility>

std::string && Get_String(void);

int main(){

    std::string str{Get_String()};
    std::cout << str << std::endl;

    return 0;
}

std::string && Get_String(void){

    std::string str{"hello world"};

    return std::move(str);
}
Run Code Online (Sandbox Code Playgroud)

程序编译,但执行时会出现段错误.


这是我的理由: Get_String将创建一个本地字符串.在字符串超出范围之前,需要创建并返回该字符串的副本.该副本将用于在main中构造字符串.但是,如果我将字符串移出函数,则不需要复制.

为了理解移动语义,有人可以解释为什么我在做什么,可能没有任何意义.是否可以将对象移出函数?


编辑:
如果我更改函数签名,它编译并正确运行:

std::string && Get_String(void);
Run Code Online (Sandbox Code Playgroud)

std::string Get_String(void);  
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在返回期间移动字符串是否仍然更有效?

c++ function rvalue-reference move-semantics c++11

12
推荐指数
1
解决办法
2814
查看次数