Nel seguente codice, sono pS
e s.pS
garantiti per essere uguali nella riga finale? In altre parole, nella dichiarazione S s = S();
, posso essere sicuro che un S
temporaneo non verrà costruito?In S s = S() è garantito che non verrà creato alcun temporaneo?
#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 ogni compilatore Ho provato questo in pS == s.pS
, ma non sono sufficientemente familiarità con lo standard per essere in grado di soddisfare me stesso che questo è garantito.
No - è un temporaneo che potrebbe essere ottimizzato –
In base alle mie conoscenze, si può presumere che sarà RVO e ci si deve preoccupare solo se si verificano circostanze speciali che richiedono un trattamento speciale o garanzie di prestazioni. Altrimenti, questo è praticamente garantito e dovrebbe essere usato. – Mordachai
@Mordachai Questo non ha nulla a che fare con RVO. La R sta per ritorno. Non c'è ritorno qui. – Barry