Domanda

Come si fa a utilizzare il file ottimizzazione del valore di ritorno?
Esistono casi in cui posso fidarmi di un compilatore moderno per utilizzare l'ottimizzazione o dovrei sempre andare in modo sicuro e restituire un puntatore di qualche tipo/utilizzare un riferimento come parametro?

Ci sono casi noti in cui non si può fare l'ottimizzazione del valore di ritorno?, Mi sembra che l'ottimizzazione del valore di ritorno sarebbe abbastanza facile da eseguire per un compilatore.

È stato utile?

Soluzione

Ogni volta che le ottimizzazioni del compilatore sono abilitate (e nella maggior parte dei compilatori, anche quando le ottimizzazioni lo sono Disabilitato), avrà luogo la RVO.NRVO è leggermente meno comune, ma la maggior parte dei compilatori eseguirà anche questa ottimizzazione, almeno quando le ottimizzazioni sono abilitate.

Hai ragione, l'ottimizzazione È abbastanza facile da eseguire per un compilatore, motivo per cui i compilatori lo fanno quasi sempre.Gli unici casi in cui "non può essere realizzato" sono quelli in cui l'ottimizzazione non si applica:L'RVO si applica solo quando restituisci un temporaneo senza nome.Se si desidera restituire una variabile locale denominata, si applica invece NRVO e, sebbene sia leggermente più complesso da implementare per un compilatore, è fattibile e i compilatori moderni non hanno problemi con esso.

Altri suggerimenti

Per avere le migliori possibilità che si verifica, è possibile restituire un oggetto costruito direttamente nella dichiarazione di ritorno [chiunque può ricordare il nome di questo linguaggio - ho dimenticato it]:

Foo f() {
    ....
    return Foo( ... );
}

Ma come con tutte le ottimizzazioni, il compilatore può sempre scegliere di non farlo. E alla fine della giornata, se è necessario restituire un valore di te c'è alternativa al confidando il compilatore -. Puntatori e riferimenti non è tagliato

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top