ฉันพยายามที่จะเข้าใจประเภทการแสดงออกของ C ++ และยิ่งฉันอ่านยิ่งฉันสับสนมากขึ้นเนื่องจากฉันพบว่า C ++ ร่างยากมากที่จะแยกย่อยและดังนั้นจึงชอบแหล่งข้อมูลอื่น แต่พวกเขาขัดแย้งกันหรือไม่คำนึงว่า ถ้อยคำและคำจำกัดความระหว่างเวอร์ชัน C ++ มีการเปลี่ยนแปลงอย่างมาก
ในต่อไปนี้ฉันหมายถึงร่างต่อไปนี้:
C++11
3.10 ค่าและค่า... prvalue (“ pure” rvalue) คือ rvalue ที่ไม่ใช่ xvalue [ตัวอย่าง: ผลลัพธ์ของการเรียกฟังก์ชั่นที่มีประเภทส่งคืนไม่ใช่การอ้างอิงคือ prvalue ค่าของตัวอักษรเช่น 12, 7.3e5 หรือความจริงก็เป็นที่แพร่หลาย - ตัวอย่างท้าย]
C++17
3.10 ค่าและค่า... prvalue เป็นนิพจน์ที่การประเมินค่าเริ่มต้นวัตถุหรือบิตฟิลด์หรือคำนวณค่าของตัวถูกดำเนินการของผู้ดำเนินการตามที่ระบุโดยบริบทที่ปรากฏ
C++20
7.2.1 หมวดหมู่ค่า *... prvalue คือนิพจน์ซึ่งการประเมินค่าเริ่มต้นวัตถุหรือบิตฟิลด์หรือคำนวณค่าของตัวถูกดำเนินการของโอเปอเรเตอร์ตามที่ระบุโดยบริบทที่ปรากฏหรือนิพจน์ที่มีชนิด cv void
ฉันจะเข้าใจการเปลี่ยนแปลงถ้อยคำและมีการปรับปรุงบางอย่าง แต่สำหรับฉันการเปลี่ยนแปลงคำจำกัดความทั้งหมด มีคนช่วยฉันเข้าใจเรื่องนี้ไหม? ตัวอย่างเช่นทำไมประโยคถูกลบออกว่า prvalue เป็น rvalue ที่ไม่ใช่ xvalue หรือทำไมตัวอย่างที่เป็นประโยชน์จึงถูกลบออกไป?