Apa arti dari frasa berikut dalam C ++:
nol inisialisasi,
inisialisasi default, dan
inisialisasi nilai
Apa yang harus diketahui pengembang C ++ tentang mereka?
c++
initialization
c++-faq
Tagihan
sumber
sumber
Jawaban:
Satu hal yang perlu disadari adalah bahwa 'inisialisasi nilai' adalah baru dengan standar C ++ 2003 - tidak ada dalam standar asli 1998 (saya pikir itu mungkin satu-satunya perbedaan yang lebih dari sekadar klarifikasi). Lihat jawaban Kirill V. Lyadvinsky untuk definisi langsung dari standar.
Lihat jawaban sebelumnya tentang perilaku
operator new
untuk perincian tentang perilaku yang berbeda dari tipe inisialisasi ini dan kapan mereka melakukan tendangan (dan ketika mereka berbeda dari c ++ 98 ke C ++ 03):Poin utama dari jawabannya adalah:
Untuk mengatakannya paling tidak, ini agak rumit dan ketika metode yang berbeda muncul dengan halus.
Satu hal yang perlu diperhatikan adalah bahwa MSVC mengikuti aturan C ++ 98, bahkan dalam VS 2008 (VC 9 atau cl.exe versi 15.x).
Cuplikan berikut menunjukkan bahwa MSVC dan Digital Mars mengikuti aturan C ++ 98, sedangkan GCC 3.4.5 dan Comeau mengikuti aturan C ++ 03:
sumber
int
, tetapim()
pada nilai baris ketiga menginisialisasi m. Penting jika Anda berubahint m;
menjadiB m;
. :)A
danC
tidak digunakan dalam contoh ini (mereka dibawa dari jawaban terkait lainnya). Meskipun C ++ 98 dan C ++ 03 menggunakan terminologi yang berbeda ketika menggambarkan bagaimanaA
danC
dikonstruksi, hasilnya adalah sama di kedua standar. Hanyastruct B
menghasilkan perilaku yang berbeda.struct C { C() : m() {}; ~C(); B m; };
, maka Anda akanm.m
menjadi 0. Tetapi jika itu akan secara default diinisialisasim
seperti yang Anda katakan C ++ 03 lakukan, makam.m
tidak akan diinisialisasi seperti di C ++ 98.C ++ 03 Standar 8.5 / 5:
sumber