gpt4 book ai didi

c++ - 返回类型是否被视为右值?

转载 作者:行者123 更新时间:2023-11-28 00:14:48 25 4
gpt4 key购买 nike

只是一个简单的问题,我正在尝试模拟返回 && 时的不良做法。我知道这是一种不好的做法。

举个例子

//dummy is just an empty class
dummy && crashtest(){
dummy temp;
return std::move(temp);

}


int main() {
dummy && k = crashtest();
return 0;
}

这是一种不好的做法,因为 k 现在持有对函数内已析构的 temp 的引用。

我尝试了一种不同的方法,在我的 main 中做了类似的事情:

dummy l; //generate temp
dummy && k = std::move(l); //return value
dummy && d = k; // copy

虽然l不会真的被销毁,但怎么不让我编译呢?我收到一条错误消息,说我正在尝试绑定(bind)一个左值。这不是和函数中发生的一样吗?据我了解,函数中发生的事情是:

创建 temp -> std::move(temp) -> 返回类型 dummy&& 接收它 -> k 等同于返回类型 temporary。

我需要澄清。返回类型是否被视为 rvalue

奖金问题:如果右值引用变量等于右值引用变量会发生什么? &&lhs = &&rhs,lhs 是否采用 rhs 引用?

最佳答案

从函数返回右值引用很可能会导致悬垂引用(引用存在,但它引用的临时对象已被销毁)。这实际上在标准中称为 xvalue(一个“eXpiring”值)。

关于c++ - 返回类型是否被视为右值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31069996/

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