Im folgenden Code sind pS
und s.pS
garantiert in der letzten Zeile gleich? Mit anderen Worten, in der Aussage S s = S();
, kann ich sicher sein, dass eine temporäre S
wird nicht gebaut werden?In S s = S() ist garantiert, dass keine temporäre erstellt wird?
#include <iostream>
using namespace std;
struct S
{
S() { pS = this; }
S* pS;
};
int main()
{
S s = S();
S* pS = &s;
cout << pS << " " << s.pS << endl;
}
In jedem Compiler habe ich dies in pS == s.pS
getestet, aber ich bin nicht ausreichend vertraut mit dem Standard der Lage sein, mich zu überzeugen, dass dies gewährleistet ist.
Nein - es ist eine temporäre, die vielleicht optimiert werden könnte –
Nach meinem besten Wissen können Sie davon ausgehen, dass es RVO sein wird und nur sorgen müssen, wenn Sie besondere Umstände haben, die besondere Behandlung oder Leistungsgarantien erfordern. Ansonsten ist dies praktisch gewährleistet und sollte genutzt werden. – Mordachai
@Mordachai Das hat nichts mit RVO zu tun. Das R steht für Rückkehr. Es gibt keine Rückkehr hier. – Barry