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

Bolehkah Kelas dengan Inisialisasi Ahli Bukan Statik Menjadi Agregat dalam C 14?

Susan Sarandon
Susan Sarandonasal
2024-11-29 03:50:13596semak imbas

Can Classes with Non-Static Member Initializers Be Aggregates in C  14?

Permulaan Agregat C 11 untuk Kelas dengan Pemula Bukan Statik Ahli

Dalam C 11, struktur dan kelas dengan pembina dan peribadi yang ditentukan pengguna atau ahli data bukan statik yang dilindungi tidak dianggap sebagai agregat. Dari segi sejarah, ini juga berlaku untuk kelas dengan pemula ahli bukan statik, walaupun mereka tidak mempunyai pembina yang ditentukan pengguna.

Walau bagaimanapun, dalam C 14, sekatan ini telah dialih keluar. Kini, kelas dengan pemula ahli bukan statik masih boleh menjadi agregat, selagi ia memenuhi keperluan lain untuk agregat:

  • Tiada pembina yang ditentukan pengguna
  • Tiada peribadi atau bukan yang dilindungi -ahli data statik
  • Tiada kelas asas
  • Tiada maya fungsi

Contohnya:

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

int main()
{
  A a{0, 1}; // This is now allowed in C++14
  return 0;
}

Perubahan ini didorong oleh keinginan untuk menyelaraskan tingkah laku permulaan agregat dengan gerak hati. Pemula dalam kelas pada asasnya adalah bersamaan dengan pembina yang ditentukan pengguna, tetapi adalah berlawanan dengan intuitif bagi mereka untuk menghalang kelas daripada menjadi agregat.

Sejak G 5.0, C 14 agregat dengan pemula ahli data bukan statik telah disokong menggunakan std=c 1y atau -std=c 14.

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