Rumah >pembangunan bahagian belakang >C++ >Mengapakah GCC 4.6.1 menimbulkan ralat apabila memulakan `std::array` dengan pendakap?

Mengapakah GCC 4.6.1 menimbulkan ralat apabila memulakan `std::array` dengan pendakap?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-29 06:42:31601semak imbas

Why does GCC 4.6.1 throw an error when initializing a `std::array` with braces?

std::array Initialization dengan Braces

Dalam C , terdapat dua cara biasa untuk mencipta std::array menggunakan pengamulaan lists:

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

Walau bagaimanapun, jika anda menghadapi ralat kompilasi tentang "ungkapan utama yang dijangkakan sebelum token ','" dengan GCC 4.6.1, ia disebabkan oleh sedikit keanehan dalam std::array.

Tidak seperti std::vector, yang mempunyai pembina yang secara eksplisit mengambil senarai pemula, std::array ditakrifkan sebagai struct:

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

Oleh itu, ia tidak mempunyai pembina yang menerima secara langsung senarai pemula. Sebaliknya, ia boleh dimulakan menggunakan permulaan agregat.

Untuk mengagregat dengan betul memulakan tatasusunan di dalam std::array struct, satu set tambahan pendakap kerinting diperlukan:

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

Ia adalah perlu diperhatikan bahawa piawaian C menunjukkan bahawa pendakap tambahan harus menjadi pilihan dalam senario ini. Oleh itu, ralat kompilasi yang anda alami dengan GCC 4.6.1 berkemungkinan pepijat dalam pengkompil.

Atas ialah kandungan terperinci Mengapakah GCC 4.6.1 menimbulkan ralat apabila memulakan `std::array` dengan pendakap?. 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