จนถึงวันนี้ฉันคิดอย่างนั้น:
i += j;
เป็นเพียงทางลัดสำหรับ:
i = i + j;
แต่ถ้าเราลองทำสิ่งนี้:
int i = 5;
long j = 8;
จากนั้นi = i + j;
จะไม่รวบรวม แต่i += j;
จะรวบรวมได้
มันหมายความว่าในความเป็นจริงi += j;
เป็นทางลัดสำหรับบางสิ่งบางอย่างเช่นนี้
i = (type of i) (i + j)
?
i+=(long)j;
แม้จะรวบรวมได้ดี
i += (int) f;
ปลดเปลื้อง f ก่อนเพิ่มดังนั้นจึงไม่เทียบเท่า (int) i += f;
ปลดเปลื้องผลลัพธ์หลังจากการมอบหมายไม่เท่ากับ ไม่มีสถานที่ที่จะนำนักแสดงที่จะหมายถึงว่าคุณต้องการที่จะโยนค่าหลังจากเพิ่ม แต่ก่อนที่จะได้รับมอบหมาย