gpt4 book ai didi

c++ - 如果左值不再用于其定义范围,编译器是否允许将左值转换为右值引用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:00 26 4
gpt4 key购买 nike

考虑以下几点:

ComplexObject foo()
{
ComplexObject temp;
//Do things with temp
ComplexObject result(temp, SOME_OTHER_SETTING); //1
//Do things with result. Do not use temp at all
return result; //2
}

ComplexObject foo()
{
ComplexObject temp;
//Do things with temp
ComplexObject result(std::move(temp), SOME_OTHER_SETTING); //1
//Do things with result. Do not use temp at all
return std::move(result); //2
}

假设 ComplexObject 有一个比它的复制构造函数更有效的 move 构造函数。

是否允许编译器有效地将第一个代码转换为第二个代码,因为它知道 ComplexObject 不能用于该 block 的其余部分?

最佳答案

不适用于 temp,但编译器可以在 as-if 规则下执行其他优化,这可能具有相同的效果。

对于 result,有一个关于 return 语句的特殊规则,如果可能的话将使用 move (并且省略优于 move 或复制)。

关于c++ - 如果左值不再用于其定义范围,编译器是否允许将左值转换为右值引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10354719/

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