Rumah >pembangunan bahagian belakang >C++ >Adakah Kelas dengan Pemula Ahli Dalam Kelas Masih Agregat dalam C?

Adakah Kelas dengan Pemula Ahli Dalam Kelas Masih Agregat dalam C?

DDD
DDDasal
2024-11-09 07:18:02507semak imbas

Is a Class with In-Class Member Initializers Still an Aggregate in C  ?

Permulaan Agregat C 11 untuk Kelas dengan Pemula Bukan Statik Ahli

Penggunaan pemula ahli dalam kelas boleh memberi kesan ketara kepada tingkah laku kelas dalam C . Secara khususnya, ia menimbulkan persoalan sama ada kelas kekal sebagai agregat dalam keadaan ini.

Dalam C 11, pemula ahli dalam kelas memperkenalkan sekatan yang ketara: mereka melarang pengelasan kelas atau struktur sebagai agregat. Ini jelas dalam draf piawai C 11, yang mentakrifkan agregat sebagai "kelas tanpa pembina yang disediakan pengguna, tiada pemula pendakap atau setara untuk ahli data bukan statik, tiada ahli data bukan statik peribadi atau dilindungi, tidak kelas asas, dan tiada fungsi maya." Dengan memperkenalkan pemula dalam kelas, kelas menjadi serupa dengan pembina yang ditentukan pengguna, kehilangan status agregatnya.

Walau bagaimanapun, sekatan ini telah ditarik balik dalam C 14. Pemula ahli tidak lagi menghalang kelas daripada dianggap sebagai agregat, kerana piawaian telah disemak untuk menghapuskan had ini. Perubahan ini diperincikan dalam N3605, yang dicadangkan untuk mengalih keluar sekatan terhadap agregat yang mempunyai pemula ahli.

Rasional untuk perubahan ini berpunca daripada pengiktirafan bahawa pemula ahli tidak setara dengan pembina yang ditentukan pengguna. Walaupun mereka berkongsi beberapa persamaan, pemula ahli lebih sejajar dengan konsep pemulaan agregat, yang bertujuan untuk menjadi cara yang ringan dan cekap untuk memulakan objek.

Kesimpulannya, dalam C 11, ahli dalam kelas pemula telah membatalkan kelayakan kelas daripada status agregat, tetapi pengehadan ini telah dialih keluar dalam C 14, membolehkan lebih fleksibiliti dalam pemulaan kelas.

Atas ialah kandungan terperinci Adakah Kelas dengan Pemula Ahli Dalam Kelas Masih 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