6
เหตุใด std :: initializer_list จึงไม่เป็นภาษาในตัว
เหตุใดจึงไม่มี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> …