Satu-satunya jawaban untuk pertanyaan Anda yang benar adalah: Karena itu tidak terdefinisi.
Ok, sebelum kalian semua membakar aku ..
Anda semua menjawab mengapa i+=i++boleh dan logis untuk menghasilkan i=0.
Saya tergoda untuk memberikan suara untuk setiap 1 dari jawaban Anda tetapi reputasi yang saya hitung akan terlalu tinggi ..
Kenapa aku sangat marah pada kalian? bukan karena apa jawaban Anda menjelaskan ..
Maksud saya, setiap jawaban yang saya baca telah melakukan upaya luar biasa untuk menjelaskan yang tidak mungkin, saya Tepuk Tangan!
Tapi apa hasilnya ?? apakah ini hasil yang intuitif - apakah ini hasil yang dapat diterima ??
Anda masing-masing melihat "raja telanjang" dan entah bagaimana menerimanya sebagai raja yang rasional.
Anda semua salah!
i+=i++; menghasilkan 0 tidak terdefinisi.
bug dalam mekanisme evaluasi bahasa jika Anda mau .. atau lebih buruk lagi! bug dalam desain.
ingin bukti? tentu saja kamu mau!
int t=0; int i=0; t+=i++; //t=0; i=1
Sekarang ini ... adalah hasil yang intuitif! karena kami pertama kali mengevaluasit memberinya nilai dan hanya setelah evaluasi dan penugasan kami memiliki operasi pasca terjadi - rasional bukan?
apakah itu rasional: i=i++dan i=imenghasilkan hasil yang sama untuki ?
sementara t=i++dan t=imemiliki hasil berbeda untuki .
Operasi pos adalah sesuatu yang harus terjadi setelah evaluasi pernyataan.
Karena itu:
int i=0;
i+=i++;
Seharusnya sama jika kita menulis:
int i=0;
i = i + i ++;
dan karena itu sama dengan:
int i=0;
i= i + i;
i ++;
dan karena itu sama dengan:
int i=0;
i = i + i;
i = i + 1;
Hasil apa pun yang tidak 1 menunjukkan bug dalam kompilator atau bug dalam desain bahasa jika kita menggunakan pemikiran rasional - namun MSDN dan banyak sumber lain memberi tahu kita "hei - ini tidak terdefinisi!"
Sekarang, sebelum saya melanjutkan, bahkan set contoh yang saya berikan ini tidak didukung atau diakui oleh siapa pun .. Namun inilah yang menurut cara intuitif dan rasional seharusnya hasilnya.
Pembuat kode harus tidak memiliki pengetahuan tentang bagaimana majelis sedang ditulis atau diterjemahkan!
Jika ditulis dengan cara yang tidak akan menghormati definisi bahasa - itu adalah bug!
Dan untuk menyelesaikannya, saya menyalin ini dari Wikipedia, operator increment dan decrement :
Karena operator increment / decrement memodifikasi operandnya, penggunaan operan semacam itu lebih dari sekali dalam ekspresi yang sama dapat menghasilkan hasil yang tidak ditentukan . Misalnya, dalam ekspresi seperti x - ++ x, tidak jelas dalam urutan apa operator pengurangan dan penambahan harus dilakukan. Situasi seperti ini menjadi lebih buruk ketika optimasi diterapkan oleh kompiler, yang dapat mengakibatkan urutan pelaksanaan operasi menjadi berbeda dari apa yang diinginkan oleh programmer.
Dan oleh karena itu.
Jawaban yang benar adalah bahwa ini TIDAK HARUS DIGUNAKAN! (karena itu TIDAK DITETAPKAN!)
Ya .. - Ini memiliki hasil yang tidak dapat diprediksi bahkan jika C # complier mencoba menormalkannya.
Saya tidak menemukan dokumentasi C # yang menjelaskan perilaku yang Anda semua dokumentasikan sebagai perilaku bahasa yang normal atau terdefinisi dengan baik. Apa yang saya temukan justru sebaliknya!
[ disalin dari dokumentasi MSDN untuk Operator Peningkatan dan Penurunan Postfix: ++ dan - ]
Ketika operator postfix diterapkan ke argumen fungsi, nilai argumen tidak dijamin akan bertambah atau dikurangi sebelum diteruskan ke fungsi. Lihat bagian 1.9.17 dalam standar C ++ untuk informasi lebih lanjut.
Perhatikan kata-kata itu tidak dijamin ...
Maafkan saya jika jawaban itu tampak sombong - saya bukan orang yang sombong. Saya hanya mempertimbangkan bahwa ribuan orang datang ke sini untuk belajar dan jawaban yang saya baca akan menyesatkan mereka dan akan merusak logika dan pemahaman mereka tentang subjek tersebut.