Warum funktioniert benannter Rückzugswertoptimierungsoptimierung hier nicht?
Posted: 09 Apr 2025, 03:19
Ich schaue mir ein Video auf RVO und NRVO an und Sie können an diesem Punkt sehen, dass: < /p>
?
Code: Select all
MyObj example()
{
MyObj a = MyObj(3);
return a += 1;
};
< /code>
hat nicht die Optimierung angewendet, während: < /p>
MyObj example()
{
MyObj a = MyObj(3);
a += 1;
return a;
};
< /code>
hat die Optimierung angewendet. Liegt dies einfach wegen einer Regel, die besagt, dass die Optimierung nur angewendet werden kann, wenn Sie einen LVALUE oder einen PrValue strikt zurückgeben? Ich habe Schwierigkeiten, die Wertkategorien zu verstehen, ich denke, return a += 1; Am Ende ist ein XValue, was ich denke, ein Lvalue, der durch einen Ausdruck in ein temporäres RValue modifiziert wurde. < /p>
Was ist mit: < /p>
MyObj example()
{
return MyObj(3) + 1;
};
< /code>
ist: < /p>
return MyObj(3) + 1;
< /code>
Die gleiche Wertkategorie wie: < /p>
return MyObj(3);