2012-07-15 28 views
13

Tüm sürdürülebilirlik ve okuma sorunlarını bir kenara koyarsak, bu kod satırları tanımsız bir davranış oluşturabilir mi?Bir referans değişkeni başlatmak için üçlü operatörün kullanılması?

float a = 0, b = 0; 
float& x = some_condition()? a : b; 
x = 5; 
cout << a << ", " << b; 
+2

daha basit olabilir bir referans başlatmak için kullanılabilir ifadeleri (mesela değişkenler, işaretçi dereferences, vs.) gibi, kesinlikle iyi: '(some_condition()? a: b) = 5; ' – Slava

cevap

10

Hayır, sorun değil. Bu kodda tanımlanmamış davranış oluşturmaz. Koşullara göre a veya b değerini 5 olarak değiştirirsiniz.

8

Bu sürece koşullu her iki tarafına

float& x = some_condition()? a : *(&b); // This is OK - it is the same as your code 
float& x = some_condition()? a : b+1; // This will not compile, because you cannot take reference of b+1 
+0

Peki, derlenememe mükemmel bir davranışdır, değil mi? –

+0

Tartışmasız, evet- kötü biçimli bir program, tanımlanmış davranışsal hiçbir şey sergilemez. – Puppy

+1

Hızlıca başarısız, erken başarısız. –

İlgili konular