Default-inisialisasi adalah istilah dari Standard yang berpotensi berarti tidak ada inisialisasi sama sekali, jadi yang Anda maksud mungkin adalah inisialisasi nol .
Deskripsi di cppreference.com sebenarnya agak menyesatkan. std::array
adalah kelas agregat, dan jika jenis elemennya primitif, itu adalah POD: "data lama biasa", dengan semantik yang sangat cocok dengan bahasa C. Konstruktor yang didefinisikan secara implisit std::array< int, N >
adalah konstruktor sepele yang sama sekali tidak melakukan apa pun.
Sintaks suka std::array< int, 3 >()
atau std::array< int, 3 > x{}
yang memberikan nilai nol tidak dilakukan dengan memanggil konstruktor. Mendapatkan nol adalah bagian dari inisialisasi nilai , ditentukan dalam C ++ 11 §8.5 / 8:
Untuk menginisialisasi nilai objek tipe T berarti:
- jika T adalah tipe kelas (mungkin memenuhi syarat cv) tanpa konstruktor default yang disediakan pengguna atau dihapus, maka objek tersebut diinisialisasi nol…, dan jika T memiliki konstruktor default non-sepele, objek tersebut diinisialisasi secara default;
std::array
tidak memiliki konstruktor default yang disediakan pengguna, sehingga inisialisasi nol. Ini memiliki konstruktor default yang didefinisikan secara implisit, tetapi itu sepele, jadi tidak pernah diinisialisasi secara default. (Tapi ini tidak membuat perbedaan karena inisialisasi sepele menurut definisi tidak berpengaruh pada waktu proses.)
jika tidak, apakah ada sintaks yang akan bekerja pada semua array (termasuk array berukuran nol) untuk menginisialisasi semua elemen ke nilai defaultnya?
Array gaya-C dan std::array
keduanya merupakan agregat, dan cara untuk menginisialisasi semua agregat dengan nol adalah dengan sintaks = {}
. Ini berfungsi sejak C ++ 98. Perhatikan bahwa array gaya-C tidak boleh memiliki luas nol, dan itu sizeof (std::array< X, 0 >)
bukan nol.
T x[N]
sintaks.