2016-05-17 27 views
6

Non è chiaro se la durata di un oggetto temporaneo sarebbe esteso legandosi ad un riferimento const in un? Espressione:La durata di un oggetto temporaneo C++ creata in?: Espressione estesa legandola a un riferimento const locale?

class Foo {...}; 

Foo *someLValue = ...; 

const Foo& = someLValue ? *someLValue : Foo(); 

è la durata del temporaneo creato chiamando il costruttore di default Foo() esteso legandolo al const ref locale anche se il binding è condizionale? Oppure questo crea un riferimento ciondolante perché il valore temporaneo di Foo() verrebbe distrutto alla fine dell'espressione?: Espressione?

risposta

5

In questo codice, il secondo e il terzo operando dell'operatore condizionale hanno diverse categorie di valori (lvalue e valore di prvalore).

Ciò significa che il risultato dell'operatore condizionale è un valore di tipo Foo, che indica una copia temporanea dell'oggetto inizializzata dall'operando selezionato.

Il riferimento si collega direttamente a questo oggetto temporaneo e pertanto la durata del temporaneo viene estesa.

Note:

  • Il riferimento non si lega direttamente alla *someLValue, neppure di Foo().
  • L'inizializzazione temporanea da Foo() è una copia di contesto di elisione quindi potrebbe non essere possibile osservare il temporaneo in questo caso.
  • Il temporaneo non è const anche se il riferimento è const.