Adakah Jenis Terbina dalam Mempunyai Pembina Lalai dalam C ?
Walaupun kenyataan dalam TC PL mendakwa bahawa jenis terbina dalam mempunyai pembina lalai , jawapan dalam konteks C 03 adalah bernuansa "tidak."
Penaakulan
Jenis terbina dalam tidak mempunyai pembina yang diisytiharkan dalam erti kata tradisional. Walau bagaimanapun, ia boleh dimulakan menggunakan sintaks yang menyerupai panggilan pembina. Inisialisasi ini muncul sebagai:
int x0(5); // Looks like a default constructor int x1{5}; // New syntax for default initialization
Walaupun ungkapan ini meniru panggilan pembina, ia sebenarnya menggunakan pemulaan nilai. Permulaan nilai ialah mekanisme yang memulakan jenis primitif kepada nilai lalai yang ditentukan oleh jenisnya.
Implikasi Sintaks Permulaan
Walaupun jenis terbina dalam kekurangan pembina yang jelas, pemulaan sintaks mencipta ilusi pembina lalai. Ini amat ketara dengan sintaks baharu untuk permulaan sifar:
int z0 = int(); // Appears like a default constructor int z1 = int{}; // New syntax for zero-initialization
Ungkapan ini berkelakuan serupa dengan pembina lalai, memulakan pembolehubah kepada nilai lalainya (dalam kes ini, 0).
Penjelasan Bjarne Stroustrup
Apabila dihubungi mengenai percanggahan yang ketara dalam TC PL, Bjarne Stroustrup menjelaskan bahawa walaupun jenis terbina dalam tidak mempunyai pembina dalam erti kata konvensional, mereka secara konsep dianggap mempunyai pembina berdasarkan tingkah laku permulaannya.
Kesimpulan
Dalam C 03, jenis terbina dalam secara teknikal tidak mempunyai pembina lalai. Walau bagaimanapun, sintaks permulaan mereka mencipta ilusi pembina sedemikian, membolehkan mereka dimulakan seolah-olah mereka melakukannya. Perbezaan ini menyerlahkan nuansa mekanisme permulaan C dan fleksibiliti sintaksnya.
Atas ialah kandungan terperinci Adakah Jenis Terbina Dalam C Benar-benar Mempunyai Pembina Lalai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!