Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kelas dengan Inisialisasi Ahli Bukan Statik Dimulakan secara Agregat dalam C?

Bolehkah Kelas dengan Inisialisasi Ahli Bukan Statik Dimulakan secara Agregat dalam C?

Barbara Streisand
Barbara Streisandasal
2024-11-21 00:49:13542semak imbas

Can Classes with Non-Static Member Initializers Be Aggregate Initialized in C  ?

Permulaan Agregat untuk Kelas dengan Pemula Ahli Bukan Statik

Dalam C , pemulaan agregat ialah sintaks yang mudah untuk memulakan ahli kelas atau struct tanpa memanggil pembina secara eksplisit. Walau bagaimanapun, penggunaan pemula ahli dalam kelas menimbulkan persoalan sama ada kelas/struktur kekal sebagai agregat.

C 11 dan Status Agregat

Menurut C 11 standard, mempunyai pemula ahli dalam kelas menghalang kelas/struktur daripada dianggap sebagai agregat. Ini disebabkan oleh fakta bahawa pemula ahli menyerupai pembina yang ditentukan pengguna, yang tidak dibenarkan dalam agregat.

struct A {
  int a = 3;
  int b = 3;
};

A a{0, 1}; // Invalid for C++11

C 14 dan Permulaan Agregat

Walau bagaimanapun, dalam C 14, sekatan ini telah ditarik balik. Inisialisasi agregat kini dibenarkan untuk kelas/struktur dengan pemula ahli bukan statik. Perubahan ini dibuat untuk menangani maklum balas pembangun dan memudahkan pemahaman tentang permulaan agregat.

struct A {
  int a = 3;
  int b = 3;
};

A a{0, 1}; // Valid for C++14

Sokongan G untuk Agregat C 14

Perhatikan bahawa G versi 5.0 dan lebih baru menyokong pemulaan agregat C 14 untuk kelas/struktur dengan pemula ahli bukan statik. Walau bagaimanapun, versi lama G mungkin tidak mengenali sintaks ini.

Atas ialah kandungan terperinci Bolehkah Kelas dengan Inisialisasi Ahli Bukan Statik Dimulakan secara Agregat dalam C?. 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