SORU
14 Ocak 2015, ÇARŞAMBA


Ne'oluyor bu ifade ile s? b = a (a = 5)

a = 5
b = a   (a = a   5)

b = 15 sonucu

Neden ilk? bundan sonra bir değişiklik yap (a = 5)? Ama neden ikinci bir değişiklik var mı? Burada tam olarak adım ne oluyor?

CEVAP
14 Ocak 2015, ÇARŞAMBA


İfadeler soldan sağa doğru - her zaman, gruplandırma bağımsız olarak değerlendirilir. Eşdeğer için:

a = 5;

int lhs = a; // 5
int rhs = (a = a   5); // Increments a by 5 (i.e. a=10), and rhs=10
b = lhs   rhs; // 15

Yani bu yürüttü sonra, a10. Ama o a sonuç 15 yerine 20 bu yüzden ana ayrıca, ilk terim için değerlendirilmiş sonra sadece olur.

Gerçekten önemli değerlendirme amacıyla ilgili bölümü öncelik olarak aynı olmadığı anlaşılır. Bu göz önünde bulundurun:

int x = First()   Second() * Third();

Öncelikçarpma Second() Third() ama First() arama sonuçları için geçerlidir anlamına gelir hala ilk değerlendirilir. Diğer bir deyişle, bu ifade ile eşdeğer

int lhs = First();
int rhs = Second() * Third();
int x = lhs   rhs;

Daha fazla ayrıntı için Eric Lippert's blog post on predence, associativity and ordering bkz.

Şiddetle bu olsa gibi kod yazma tavsiye etmem.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C#

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • Flash CS6 Video Tutorials for Beginners (Actionscript 3 Gaming)

    Flash CS6 Vi

    14 EYLÜL 2012
  • pucksz

    pucksz

    24 Mart 2006