เหตุใดตัวดำเนินการด้านท้ายที่มีเครื่องหมายจุลภาคจึงประเมินเพียงนิพจน์เดียวในกรณีจริง
ฉันกำลังเรียนรู้ C ++ ด้วยหนังสือ C ++ Primer และหนึ่งในแบบฝึกหัดในหนังสือเล่มนี้คือ: อธิบายว่านิพจน์ต่อไปนี้ใช้ทำอะไร: someValue ? ++x, ++y : --x, --y เรารู้อะไรบ้าง? เราทราบดีว่าตัวดำเนินการ ternary มีลำดับความสำคัญสูงกว่าตัวดำเนินการลูกน้ำ ด้วยตัวดำเนินการไบนารีสิ่งนี้ค่อนข้างเข้าใจได้ง่าย แต่สำหรับตัวดำเนินการด้านท้ายฉันกำลังดิ้นรนเล็กน้อย ด้วยตัวดำเนินการไบนารี "มีลำดับความสำคัญสูงกว่า" หมายความว่าเราสามารถใช้วงเล็บรอบนิพจน์ที่มีลำดับความสำคัญสูงกว่าและจะไม่เปลี่ยนแปลงการดำเนินการ สำหรับตัวดำเนินการ ternary ฉันจะทำ: (someValue ? ++x, ++y : --x, --y) ทำให้เกิดรหัสเดียวกันอย่างมีประสิทธิภาพซึ่งไม่ได้ช่วยฉันในการทำความเข้าใจว่าคอมไพเลอร์จะจัดกลุ่มโค้ดอย่างไร อย่างไรก็ตามจากการทดสอบกับคอมไพเลอร์ C ++ ฉันรู้ว่านิพจน์นั้นรวบรวมและฉันไม่รู้ว่าตัว:ดำเนินการใดสามารถยืนได้ด้วยตัวเอง ดังนั้นคอมไพเลอร์ดูเหมือนจะตีความตัวดำเนินการ ternary อย่างถูกต้อง จากนั้นฉันดำเนินการโปรแกรมด้วยสองวิธี: #include <iostream> int main() { bool …