Sintaks Pemula Kabur untuk Agregat Yang Mengandungi Tatasusunan
Dalam C , apabila memulakan agregat yang mengandungi tatasusunan, mengabaikan pendakap kerinting boleh menyebabkan kekeliruan dan ralat. Ini jelas dalam contoh berikut:
// Error: Too many initializers std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} }; // Valid std::array<double, 2> a2 = {0.1, 2.3};
Pendakap Diperlukan untuk std::array of Structures
Contoh pertama membuang ralat kerana std::array ialah agregat dan tidak mempunyai pembina yang ditentukan pengguna. Permulaan tatasusunan dalamannya memerlukan pendakap eksplisit, seperti yang dilihat dalam versi yang diperbetulkan:
std::array<A, 2> a1 = { {{0, 0.1}, {2, 3.4}} };
Pendakap Tidak Diperlukan untuk std::array POD
Sebaliknya, std::array
Ketekalan untuk Agregat
Prinsip memerlukan pendakap untuk ahli agregat terpakai kepada jenis agregat lain sebagai baik:
// Valid B meow1 = {1, 2}; B bark1 = {{1, 2}}; C meow2 = {1, 2}; C bark2 = {{1, 2}};
Kekaburan dalam D
Walau bagaimanapun, contoh berikut membawa kepada ralat:
// Error: Too many initializers D meow3 = {{1, 2}, {3, 4}}; D bark3 = {{{1, 2}, {3, 4}}};
Dalam D, pemula kerana foo itu sendiri adalah array. Pendakap dalam meow3 adalah samar-samar kerana ia boleh merujuk sama ada pada permulaan foo atau tatasusunan dalamannya. Untuk menyelesaikan kekaburan, pendakap eksplisit diperlukan, seperti dalam bark3.
Mekanisme untuk Memulakan Agregat
Apabila pendakap ditinggalkan dalam permulaan agregat, beberapa peraturan dikenakan:
Contoh Tambahan
Atas ialah kandungan terperinci Bila hendak menggunakan Pendakap dalam Permulaan Agregat C dengan Tatasusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!