MyObj example()
{
MyObj a = MyObj(3);
return a += 1;
};
< /code>
не имеет оптимизации, тогда как: < /p>
MyObj example()
{
MyObj a = MyObj(3);
a += 1;
return a;
};
< /code>
имеет применение оптимизации. Это просто из -за правила, в котором говорится, что оптимизация может быть применена только в том случае, если вы строго вернете LVALUE или PRValue? У меня проблемы с пониманием категорий ценностей, я думаю, вернуть a += 1; в конечном итоге станет XValue, что, я думаю, LVALUE, изменяемое во временное RVALUE по выражению.MyObj example()
{
return MyObj(3) + 1;
};
< /code>
is: < /p>
return MyObj(3) + 1;
< /code>
Такая же категория значений, что и: < /p>
return MyObj(3);
Я смотрю видео на RVO и NRVO, и вы можете увидеть в этот момент: < /p> [code]MyObj example() { MyObj a = MyObj(3); return a += 1; }; < /code> не имеет оптимизации, тогда как: < /p> MyObj example() { MyObj a = MyObj(3); a += 1; return a; }; < /code> имеет применение оптимизации. Это просто из -за правила, в котором говорится, что оптимизация может быть применена только в том случае, если вы строго вернете LVALUE или PRValue? У меня проблемы с пониманием категорий ценностей, я думаю, вернуть a += 1; в конечном итоге станет XValue, что, я думаю, LVALUE, изменяемое во временное RVALUE по выражению.MyObj example() { return MyObj(3) + 1; }; < /code> is: < /p> return MyObj(3) + 1; < /code> Такая же категория значений, что и: < /p> return MyObj(3); [/code] ?