2016-05-17 51 views
6

benim için açık değildir: ifadesi:Bir C++ geçici nesnesinin yaşam süresi?: Ifadesi yerel bir const referansına bağlayarak genişletildi mi? ? Geçici nesnenin ömrü, bir const referans olarak bağlama yoluyla uzatılabilir edip

class Foo {...}; 

Foo *someLValue = ...; 

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

varsayılan kurucuyu çağırarak oluşturulan geçici yaşam boyu mı Foo(), bağlama koşullu olsa da yerel sabitleme ref'ye bağlayarak genişletildi mi? Ya da bu, sallantılı bir referans yaratır, çünkü Foo() 'nın geçici değeri?: Ifadesinin sonunda yok edilir?

cevap

5

Bu kodda, koşullu operatörün ikinci ve üçüncü işlenenleri farklı değer kategorilerine (değer ve değer) sahiptir.

Bu, koşullu işlecin sonucunun, seçilen işlenenden kopyala başlatılan geçici bir nesneyi ifade eden Foo türünde bir değer olduğu anlamına gelir.

Başvuru doğrudan bu geçici nesneye bağlanır ve bu nedenle geçici ömürleri uzatılır.

Notlar:

  • referans asla *someLValue, ne de hatta Foo() doğrudan bağlanır. 'dan başlatılan geçici bir kopya kopyalama içeriğidir, bu nedenle bu durumda geçici olarak gözlemleyemeyebilirsiniz.
  • Referans const olmasına rağmen, geçici olmayan const değildir.