Sorunuza doğru olan tek cevap şudur: Çünkü tanımsızdır.
Tamam, hepiniz beni yakmadan önce ..
Hepiniz bunun neden i+=i++iyi ve mantıklı olduğunu söylediniz i=0.
Cevaplarınızın her birini aşağıya oylamaya cazip geldim ama hesapladığım itibar çok yüksek olurdu.
Neden sana bu kadar kızgınım insanlar? Cevaplarınızın açıkladığı için değil ..
Yani, okuduğum her cevap imkansızı açıklamak için kayda değer bir çaba sarf etti, Alkışlar!
Ama sonuç nedir ?? sezgisel bir sonuç mu - kabul edilebilir bir sonuç mu ??
Her biriniz "çıplak kralı" gördünüz ve bir şekilde rasyonel kral olarak kabul ettiniz.
Hepiniz YANLIŞsınız!
i+=i++; sonuçlanmak 0 tanımsız.
dil değerlendirme mekanizmasında bir hata ... ya da daha kötüsü! tasarımda bir hata.
kanıt ister misin? tabii ki istiyorsun!
int t=0; int i=0; t+=i++; //t=0; i=1
Şimdi bu ... sezgisel bir sonuç! çünkü önce değerlendirdikt olarak bir değerle değerlendirdik ve ancak değerlendirme ve görevlendirmeden sonra operasyon sonrası gerçekleştik - rasyonel değil mi?
rasyonel mi: i=i++ve i=iaynı sonucu vermek içini midir ?
süre t=i++ve t=iiçin farklı sonuçlar var i.
Post operasyon ifadenin değerlendirilmesinden sonra olması gereken bir şeydir.
Bu nedenle:
int i=0;
i+=i++;
Eğer yazsaydık aynı olmalı:
int i=0;
i = i + i ++;
ve bu nedenle aynı:
int i=0;
i= i + i;
i ++;
ve bu nedenle aynı:
int i=0;
i = i + i;
i = i + 1;
1Rasyonel düşünmeye devam edersek, karşılaştırıcıda bir hata veya dil tasarımında bir hata olduğunu göstermeyen herhangi bir sonuç - ancak MSDN ve diğer birçok kaynak bize "hey - bu tanımsız!"
Şimdi, devam etmeden önce, verdiğim bu örnekler bile hiç kimse tarafından desteklenmiyor ya da kabul edilmiyor. Ancak sezgisel ve rasyonel yolla sonuç bu olmalıydı.
Kodlayıcı, montajın nasıl yazıldığını veya tercüme edildiğini bilmemelidir!
Dil tanımlarına uymayacak şekilde yazılmışsa - bu bir hatadır!
Ve bitirmek için bunu Wikipedia'dan kopyaladım , Arttırma ve azaltma operatörleri :
Artış / azaltma operatörü işlenenini değiştirdiğinden, böyle bir işlenenin aynı ifadede birden çok kez kullanılması tanımlanmamış sonuçlar üretebilir . Örneğin, x - ++ x gibi ifadelerde, çıkarma ve artış işleçlerinin hangi sırayla gerçekleştirilmesi gerektiği açık değildir. Derleyici tarafından optimizasyonlar uygulandığında bu gibi durumlar daha da kötüleşir, bu da işlemlerin yürütme sırasının programcının amaçladığından farklı olmasına neden olabilir.
Ve bu nedenle.
Doğru cevap, bu KULLANILMAMALIDIR! (TANIMLANMADIĞI gibi!)
Evet .. - C # complier bir şekilde normalleştirmeye çalışsa bile öngörülemeyen sonuçları var.
Hepinizin dilin normal veya iyi tanımlanmış bir davranışı olarak belgelenen davranışı tanımlayan herhangi bir C # belgesi bulamadım. Ne buldum tam tersi!
[ Postfix Arttırma ve Azaltma İşleçleri için MSDN belgelerinden kopyalandı: ++ ve - ]
Bir işlev bağımsız değişkenine postfix operatörü uygulandığında, bağımsız değişkenin değerinin işleve geçirilmeden önce artırılması veya azaltılması garanti edilmez . Daha fazla bilgi için C ++ standardındaki 1.9.17 bölümüne bakın.
Bu kelimelerin garanti edilmediğine dikkat edin ...
Bu cevap kibirli görünüyorsa affet beni - kibirli biri değilim. Sadece binlerce insanın buraya öğrenmeye geldiğini ve okuduğum yanıtların onları yanlış yönlendireceğini ve konuyla ilgili mantıklarına ve anlayışlarına zarar vereceğini düşünüyorum.