Permulaan Agregat C 11 untuk Kelas dengan Pemula Ahli Bukan Statik
Dalam C 11, kelas atau struct dianggap sebagai agregat jika ia memenuhi kriteria tertentu, termasuk tidak mempunyai pembina yang ditentukan pengguna, tiada pemula pendakap atau sama untuk ahli data bukan statik dan tiada ahli data bukan statik peribadi atau dilindungi.
Walau bagaimanapun, dalam standard C 11, menambah pemula ahli bukan statik pada kelas atau struct menukar statusnya sebagai agregat. Ini kerana pemula ahli adalah serupa dengan pembina yang ditentukan pengguna, yang membatalkan kelayakan kelas atau struct daripada menjadi agregat. Perubahan dalam takrifan ini boleh membawa kepada tingkah laku yang tidak dijangka.
Dalam contoh yang disediakan:
struct A { int a = 3; int b = 3; }; A a{0,1}; // ???
Kelas A tidak lagi dianggap sebagai agregat kerana kehadiran pemula ahli dalam kelas. Akibatnya, permulaan agregat A a{0,1}; adalah tidak sah.
Tingkah laku ini telah disemak dalam C 14, di mana kehadiran pemula ahli bukan statik tidak lagi menghalang kelas atau struct daripada menjadi agregat. Oleh itu, dalam C 14, permulaan agregat A adalah sah.
Adalah penting untuk ambil perhatian bahawa piawaian C telah mengalami perubahan, dan adalah penting untuk menyemak versi terkini piawai atau menggunakan C yang mematuhi 14 atau lebih baru pengkompil untuk memastikan tafsiran yang betul bagi kod yang melibatkan pemulaan agregat dan pemula ahli bukan statik.
Atas ialah kandungan terperinci Bolehkah kelas C dengan pemula ahli bukan statik menjadi agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!