2010-01-21 18 views
24

, ben kısa devre değerlendirme ve tam ifade yararlanarakKısa Devre Değerlendirmesi, Java'da olduğu gibi C++ ile garanti edilir mi? soldan sağa Java'da

if (a != null && a.fun()); 

kullanmak değerlendirilir?

C++ 'da aynısını yapabilir miyim? Farklı platform ve derleyicide taşınabilir olmayı garanti ediyorlar mı?

if (a != 0 && a->fun()); 
+5

Kendinizi biraz deneyin, eminim ki soruda zaten var olan anahtar kelimelerle cevabı bulabilirdiniz. 'C++ kısa devre' için Google ve muhtemelen sorunuza doğrudan cevap veren birçok sonuç bulacaksınız. –

+6

Muhtemelen burada sorulan soruların yaklaşık% 85'ini aynı şekilde söyleyebilirsiniz. –

+2

olası kopyası [C/C++ 'da görevlendirilmiş kısa devirli boolean operatörleri var mı? Ve değerlendirme sırası?] (Http://stackoverflow.com/questions/628526/is-short-circuiting-boolean-operators-mandated-in-cc-and-evaluation-order) – jpalecek

cevap

36

Evet, türleri "yerleşik" için garanti edilir. Ancak, & & veya || kendi türleriniz için kısa devre değerlendirmesi yapılmaz. Bu nedenle, bu operatörlerin aşırı yüklenmesi kötü bir şey olarak kabul edilir.

+1

Bu, operatör aşırı yüklenmesinin tam sebebinin Java'da bulunmadığı bilgimdir. –

+0

@ Thorbjørn: doğru olabilir, ama bana kızgın geliyor - Java, operatörün aşırı yüklenmesine izin vermiş olabilir, ancak bu iki operatörün aşırı yüklenmesine izin vermemiş olabilir (ya da C++, aşırı yüklenen ya da aşırı yüklenen operatöre aşırı yüklenememiştir). Her zaman, "yerel görünen kod yerel olmalıdır" argümanı olduğundan, kullanıcı tanımlı kodları çağıran her şeyin, açıkça bir yöntem çağrısı ile satırın dışına çıkması gerektiği gibi görüneceğini varsaydım. –

+2

Madness, seyircinin gözünde. Aşırı yükleme bazı çok farklı dezavantajlara sahiptir, yani beklediğiniz davranışa sahip olmak için HERHANGİ BİR ŞEKİLDE güvenememeniz, Java'nın bu haklı olduğunu düşünmem için yeterlidir. –

İlgili konular