(int) + 4*5;
นี่คือเหตุผลที่(การเพิ่มชนิดที่มีค่า)ไปได้หรือไม่ (ลองใช้ g ++ และ gcc.)
ฉันรู้ว่ามันไม่สมเหตุสมผล (และไม่มีผล) แต่ฉันอยากรู้ว่าทำไมถึงเป็นไปได้
(int) + 4*5;
นี่คือเหตุผลที่(การเพิ่มชนิดที่มีค่า)ไปได้หรือไม่ (ลองใช้ g ++ และ gcc.)
ฉันรู้ว่ามันไม่สมเหตุสมผล (และไม่มีผล) แต่ฉันอยากรู้ว่าทำไมถึงเป็นไปได้
cppinsightsว่าช่วยให้เข้าใจว่าโค้ดมีลักษณะอย่างไรจากมุมมองของคอมไพเลอร์ฟรอนต์เอนด์ นอกจากนี้ยังมีเวอร์ชันออนไลน์คุณสามารถดูว่ามันบอกอะไรเกี่ยวกับตัวอย่างของคุณ ('วงเล็บ' เดียวกันกับคำตอบที่คุณได้รับ)
+(int)+ 4*5;และ-(int)- 4*5;และ-+-+-(int)-+-+- 4*5;น้อยกว่าในเชิงกวี;
คำตอบ:
+นี่เป็นเอกภาค+ผู้ประกอบการไม่ดำเนินการนอกจากนี้ไบนารี ไม่มีอะไรเพิ่มเติมเกิดขึ้นที่นี่
นอกจากนี้ไวยากรณ์(int)ยังใช้สำหรับการพิมพ์
คุณสามารถอ่านคำสั่งนั้นอีกครั้งเป็น
(int) (+ 4) * 5;
ซึ่งแยกวิเคราะห์เป็น
((int) (+ 4)) * (5);
ซึ่งกล่าวว่า
+4int5สิ่งนี้คล้ายกับ(int) (- 4) * (5);ที่การใช้งานของตัวดำเนินการยูนารีคุ้นเคยมากกว่า
ในกรณีของคุณ unary +และ cast to int- ทั้งคู่ซ้ำซ้อน
(+ 4)ไม่ได้สร้างตัวถูกดำเนินการ+4หมายความว่าใช้ยูนารี+กับตัวถูกดำเนินการ4ซึ่งแท้จริงแล้วเป็น no-op ในกรณีของ OP แต่อาจทำให้การเลื่อนตำแหน่งจำนวนเต็มหรือการสลายตัวของอาร์เรย์ในสถานการณ์อื่น ๆ ตัวอย่างเช่นchar c = 0; sizeof +c == sizeof cอาจเป็นเท็จและsizeof +"a"อาจไม่ใช่ 2
42;:-)
((int)(+4)) * 5นี้ถูกตีความว่าเป็น นั่นคือการแสดงออก+4(ผู้ประกอบการเอกบวกนำไปใช้กับตัวอักษร4) หล่อพิมพ์intพร้อมกับโยนแบบ C 5และผลที่ได้คูณด้วย
(int)-4*5