Dalam C , senarai pemula menyediakan cara yang mudah untuk memulakan objek agregat atau tatasusunan. Walau bagaimanapun, apabila bekerja dengan struktur data tertentu seperti std::array dan struktur agregat, sintaks memerlukan pendakap tambahan, menyebabkan ramai pengaturcara tertanya-tanya mengapa.
std::array ialah bekas bersaiz tetap yang diisytiharkan sebagai jenis data agregat, bermakna ia tidak mempunyai pembina yang ditentukan pengguna. Sebagai agregat, std::array memulakan secara langsung ahlinya, termasuk tatasusunan dalaman.
Untuk memulakan tatasusunan dalaman secara langsung, pendakap tambahan diperlukan. Pertimbangkan contoh berikut:
std::array<int, 2> a1 = {{0, 1}, {2, 3}};
Di sini, pendakap sekitar {0, 1} dan {2, 3} adalah penting kerana ia menunjukkan bahawa permulaan adalah untuk tatasusunan dalaman dalam a1. Tanpa pendakap ini, kod akan menghasilkan ralat kompilasi disebabkan terlalu banyak pemula.
Berbeza dengan std::array, jenis asas seperti double tidak memerlukan pendakap tambahan dalam senarai pemula. Ini kerana ia bukan agregat. Contohnya:
std::array<double, 2> a2 = {0.1, 2.3};
Dalam kes ini, a2 ialah tatasusunan nilai berganda. Memandangkan double bukan agregat, permulaan tidak melibatkan sebarang tatasusunan dalaman dan pendakap tambahan tidak diperlukan.
Keperluan untuk pendakap tambahan melangkaui std::array . Jenis lain yang melibatkan agregat juga memerlukannya. Contohnya:
struct B { int foo[2]; }; B meow1 = {1, 2}; // OK (fully-braced) B bark1 = {{1, 2}}; // OK (extra braces for inner aggregate) struct C { int a, b; }; C meow2 = {1, 2}; // OK (completely elided braces) C bark2 = {{1, 2}}; // OK (extra braces for inner aggregate) struct D { int foo[2]; }; D meow3 = {{1, 2}, {3, 4}}; // error (neither braced-elided nor fully-braced) D bark3 = {{{1, 2}, {3, 4}}}; // OK (extra braces for inner aggregate)
Untuk meringkaskan, pendakap tambahan diperlukan dalam senarai pemula apabila memulakan agregat seperti std::array dan struktur tertentu kerana ia menandakan permulaan tatasusunan dalaman atau ahli agregat. Memahami perbezaan ini adalah penting untuk mengelakkan ralat penyusunan dan memastikan permulaan yang betul bagi struktur data tersebut.
Atas ialah kandungan terperinci Mengapa Pendakap Tambahan Kadang-kadang Diperlukan dalam Senarai C Initializer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!