Rumah >pembangunan bahagian belakang >C++ >Mengapa GCC Gagal Memulakan std::array dengan Senarai Permulaan?

Mengapa GCC Gagal Memulakan std::array dengan Senarai Permulaan?

Linda Hamilton
Linda Hamiltonasal
2024-10-29 04:41:02704semak imbas

Why Does GCC Fail to Initialize std::array with Initialization Lists?

Senarai Permulaan dan std::array: A GCC Bug

Kelas std::array dalam Perpustakaan Standard C menyediakan tetap- bekas tatasusunan saiz. Umumnya dipercayai bahawa kelas ini menyokong senarai pemulaan.

Walau bagaimanapun, menggunakan GCC 4.6.1, cuba untuk memulakan std::array tikar menggunakan sintaks berikut gagal:

<code class="cpp">std::array<std::string, 2> strings = { "a", "b" };
std::array<std::string, 2> strings({ "a", "b" });</code>

Walaupun senarai pemula bekerja dengan std::vector, tingkah laku ini dengan std::array telah menimbulkan persoalan tentang standard C atau isu GCC yang berpotensi.

std::array's Inner Workings

std::array pada asasnya ialah struct yang merangkum tatasusunan. Strukturnya menyerupai:

<code class="cpp">template<typename T, int size>
struct std::array {
  T a[size];
};</code>

Tidak seperti std::vector, yang mempunyai pembina yang menerima senarai pemula, std::array tidak mempunyai pembina sedemikian.

Permulaan Agregat

Walaupun std::array tidak mempunyai pembina eksplisit untuk senarai permulaan, ia dianggap sebagai jenis agregat dalam C 11. Oleh itu, ia boleh dimulakan secara agregat. Walau bagaimanapun, untuk memulakan tatasusunan dalam struct, set tambahan pendakap kerinting diperlukan:

<code class="cpp">std::array<std::string, 2> strings = {{ "a", "b" }};</code>

Potensi Pepijat GCC

Standard C membenarkan peninggalan pendakap kerinting tambahan dalam pemulaan tersebut. Oleh itu, kemungkinan besar ketidakupayaan GCC untuk mengendalikan sintaks ini tanpanya adalah pepijat.

Atas ialah kandungan terperinci Mengapa GCC Gagal Memulakan std::array dengan Senarai Permulaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn