12
เหตุใดอะเรย์ความยาวผันแปรจึงไม่ได้เป็นส่วนหนึ่งของมาตรฐาน C ++
ฉันไม่ได้ใช้ C มากในช่วงไม่กี่ปีที่ผ่านมา เมื่อฉันอ่านคำถามนี้วันนี้ฉันเจอไวยากรณ์ C ที่ฉันไม่คุ้นเคย เห็นได้ชัดว่าในC99ไวยากรณ์ต่อไปนี้ถูกต้อง: void foo(int n) { int values[n]; //Declare a variable length array } ดูเหมือนว่าเป็นคุณสมบัติที่มีประโยชน์มาก เคยมีการอภิปรายเกี่ยวกับการเพิ่มลงในมาตรฐาน C ++ หรือไม่และถ้าเป็นเช่นนั้นทำไมถึงถูกตัดทิ้ง เหตุผลที่เป็นไปได้บางประการ: มีขนดกสำหรับผู้ขายคอมไพเลอร์ที่จะใช้งาน เข้ากันไม่ได้กับส่วนอื่น ๆ ของมาตรฐาน สามารถเลียนแบบการทำงานด้วยการสร้าง C ++ อื่น ๆ สถานะมาตรฐาน C ++ ที่ขนาดอาร์เรย์ต้องเป็นนิพจน์คงที่ (8.3.4.1) ใช่แน่นอนฉันรู้ว่าในตัวอย่างของเล่นสามารถใช้งานstd::vector<int> values(m);ได้ แต่สิ่งนี้จัดสรรหน่วยความจำจากฮีปไม่ใช่สแต็ก และถ้าฉันต้องการอาร์เรย์หลายมิติเช่น: void foo(int x, int y, int z) …