Pemulaan Agregat C 11 untuk Kelas dengan Pemula Ahli
C 11 memperkenalkan pemulaan agregat menggunakan pendakap kerinting untuk kelas, membenarkan pemula ditentukan untuk semua ahli data bukan statik. Walau bagaimanapun, piawaian dalam C 11 menimbulkan persoalan: Bolehkah pemula ahli dalam kelas wujud dalam struktur agregat?
Dalam C 11, mempunyai pemula ahli dalam kelas menjadikan struktur atau kelas bukan agregat. Sekatan ini berpunca daripada kepercayaan bahawa pemula ahli dalam kelas berkongsi persamaan dengan pembina yang ditentukan pengguna. Walau bagaimanapun, penambahan pemula ahli tidak seharusnya membatalkan kelayakan kelas secara automatik daripada menjadi agregat.
Piawaian C 14 menangani isu ini, mengubah suai takrifan kelas agregat untuk mengecualikan hanya pembina yang disediakan pengguna, peribadi atau tidak statik yang dilindungi ahli data, kelas asas, dan fungsi maya. Kemasukan pemula ahli sebagai penyingkiran telah dialih keluar.
Oleh itu, dalam C 14, kelas seperti berikut kini dianggap sebagai agregat:
struct A { int a = 3; int b = 3; }; A a{0, 1};
Dalam C 11, di atas kod mungkin tidak sah kerana A bukan agregat. Walau bagaimanapun, dalam C 14, kod itu sah dan objek a akan dimulakan dengan a = 0 dan b = 1.
Versi terkini g (5.0 dan ke atas) kini menyokong takrifan agregat C 14 dengan pemula ahli bukan statik. Oleh itu, kod contoh akan disusun dalam g dengan sama ada -std=c 14 atau -std=c 1y.
Atas ialah kandungan terperinci Bolehkah Kelas dengan Pemula Ahli menjadi Agregat dalam C 14?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!