Bolehkah kelas C dengan pemula ahli bukan statik menjadi agregat?

Mary-Kate Olsen
Lepaskan: 2024-11-10 03:58:02
asal
686 orang telah melayarinya

Can a C   class with non-static member initializers be an aggregate?

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}; // ???
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan