เหตุใดจึงไม่มีstd::initializer_list
ภาษาหลักในตัว
สำหรับฉันแล้วดูเหมือนว่ามันเป็นคุณสมบัติที่สำคัญของ C ++ 11 แต่ก็ไม่มีคำหลักที่สงวนไว้ (หรือบางอย่างที่เหมือนกัน)
แต่initializer_list
เป็นเพียงคลาสเทมเพลตจากไลบรารีมาตรฐานที่มีการแมปพิเศษโดยนัยจากไวยากรณ์รายการวงเล็บปีกกา ใหม่{...}
ที่คอมไพเลอร์จัดการ
ตอนแรกคิดว่าโซลูชันนี้ค่อนข้างแฮ็ค
นี่เป็นวิธีการใช้งานส่วนเพิ่มเติมใหม่ในภาษา C ++: โดยบทบาทโดยปริยายของคลาสเทมเพลตบางคลาสไม่ใช่ภาษาหลักหรือไม่?
โปรดพิจารณาตัวอย่างเหล่านี้:
widget<int> w = {1,2,3}; //this is how we want to use a class
เหตุใดจึงเลือกคลาสใหม่:
widget( std::initializer_list<T> init )
แทนที่จะใช้สิ่งที่คล้ายกับแนวคิดเหล่านี้:
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
- อาร์เรย์คลาสสิกคุณอาจเพิ่มตรง
const
นี้และตรงนี้ - มีจุดสามจุดอยู่แล้วในภาษา (var-args ตอนนี้แม่แบบตัวแปร) ทำไมไม่ใช้ไวยากรณ์ซ้ำ (และทำให้รู้สึกว่ามีอยู่ในตัว )
- เพียงแค่คอนเทนเนอร์ที่มีอยู่สามารถเพิ่ม
const
และ&
ทั้งหมดนี้เป็นส่วนหนึ่งของภาษาอยู่แล้ว ผมเขียนเพียง 3 ความคิดแรกของฉันฉันแน่ใจว่ามีหลายวิธีการอื่น ๆ