Mengapa std::initializer_list
bahasa inti tidak ada di dalamnya?
Menurut saya, ini adalah fitur yang cukup penting dari C ++ 11 namun tidak memiliki kata kunci yang dicadangkan sendiri (atau yang serupa).
Sebaliknya, initializer_list
itu hanya kelas template dari pustaka standar yang memiliki pemetaan implisit khusus dari sintaks braced-init-list baru {...}
yang ditangani oleh compiler.
Pada pemikiran pertama, solusi ini cukup hacky .
Apakah ini cara penambahan baru ke bahasa C ++ sekarang akan diimplementasikan: dengan peran implisit dari beberapa kelas template dan bukan oleh bahasa inti ?
Harap pertimbangkan contoh-contoh ini:
widget<int> w = {1,2,3}; //this is how we want to use a class
mengapa kelas baru dipilih:
widget( std::initializer_list<T> init )
alih-alih menggunakan sesuatu yang mirip dengan salah satu ide ini:
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
- array klasik, Anda mungkin bisa menambahkan
const
di sana-sini - tiga titik sudah ada dalam bahasa (var-args, sekarang template variadic), mengapa tidak menggunakan kembali sintaks (dan membuatnya terasa built-in )
- hanya wadah yang ada, bisa menambahkan
const
dan&
Semuanya sudah menjadi bagian dari bahasa. Saya hanya menulis 3 ide pertama saya, saya yakin ada banyak pendekatan lain.