是否允许C ++编译器将左值的最后一次用法隐式转换为右值?

问题描述

根据C ++标准:

复制省略是允许的两种优化形式之一, 以及分配省略和扩展,(自C ++ 14起)

如果我没记错的话,只能在return,throw,catch和yield语句中使用复制省略。

在这种情况下,对于这样的代码

void func(type x)
{
    auto y = bar();

    // do something with y

    x.foo = y; // Can this be optimized?

    return;
}

编译器标准在理论上是否允许在左值y上使用move构造函数(可能通过将其隐式转换为xvalue)假设编译器足够聪明,可以确定该转换是安全/等效的(不同于answer中提到的特殊情况。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)