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

  • Cartoonium

    Cartoonium

    11 NİSAN 2011
  • DRDAnimation

    DRDAnimation

    28 EYLÜL 2012
  • iNCH

    iNCH

    20 Temmuz 2009