Rumah >pembangunan bahagian belakang >C++ >Mengapakah Pembinaan Lalai atau Pemadaman Secara Eksplisit Menghalang Permulaan Agregat dalam C 20?
Mengapa pembina lalai atau dipadamkan eksplisit menghalang pemulaan agregat dalam C 20
C 20 memperkenalkan perubahan yang mempengaruhi pemulaan agregat. Sebelum ini, struct yang dibenarkan mungkin telah memungkiri atau memadamkan pembina secara eksplisit. Walau bagaimanapun, ini tidak lagi berlaku.
Penaakulan
Perubahan ini didorong oleh keinginan untuk meningkatkan semantik permulaan dalam C dan menjadikannya lebih konsisten. Membenarkan permulaan agregat dengan pembina lalai atau dipadamkan secara eksplisit boleh membawa kepada tingkah laku yang mengelirukan dan tidak dijangka.
Sebagai contoh, pertimbangkan kod berikut:
<code class="cpp">struct X { int i{4}; X() = default; }; int main() { X x1(3); // ill-formed - no matching c’tor X x2{3}; // compiles! }</code>
Dalam C 17, x2 akan memulakan ahli i berubah kepada 3. Walau bagaimanapun, tingkah laku ini tidak konsisten dengan pembina yang ditentukan pengguna. Perubahan ini menyelesaikan ketidakkonsistenan ini.
Penyelesaian Alternatif
Untuk menyelesaikan ralat, pembina lalai atau dipadamkan secara eksplisit tidak boleh digunakan untuk jenis agregat. Sebaliknya, pertimbangkan untuk meninggalkan pembina atau menggunakan pembina yang ditentukan pengguna.
Atas ialah kandungan terperinci Mengapakah Pembinaan Lalai atau Pemadaman Secara Eksplisit Menghalang Permulaan Agregat dalam C 20?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!