Sudah ada jawaban yang bagus tentang keuntungan menggunakan inisialisasi daftar, namun aturan pribadi saya adalah TIDAK untuk menggunakan kurung kurawal bila memungkinkan, tetapi sebaliknya membuatnya tergantung pada makna konseptual:
- Jika objek yang saya buat secara konseptual memiliki nilai yang saya berikan dalam konstruktor (mis. Kontainer, POD struct, atomics, smart pointer, dll.), Maka saya menggunakan kawat gigi.
- Jika konstruktor menyerupai pemanggilan fungsi normal (ia melakukan beberapa operasi yang lebih atau kurang kompleks yang ditentukan oleh argumen) maka saya menggunakan sintaks pemanggilan fungsi normal.
- Untuk inisialisasi default, saya selalu menggunakan kurung kurawal.
Untuk satu, dengan cara itu saya selalu yakin bahwa objek akan diinisialisasi terlepas dari apakah itu misalnya kelas "nyata" dengan konstruktor default yang akan dipanggil tetap atau tipe builtin / POD. Kedua itu - dalam banyak kasus - konsisten dengan aturan pertama, sebagai objek default diinisialisasi sering mewakili objek "kosong".
Dalam pengalaman saya, aturan ini dapat diterapkan jauh lebih konsisten daripada menggunakan kurung kurawal secara default, tetapi harus secara eksplisit mengingat semua pengecualian ketika mereka tidak dapat digunakan atau memiliki makna yang berbeda dari sintaks pemanggilan fungsi "normal" dengan tanda kurung (memanggil kelebihan beban yang berbeda).
Misalnya cocok dengan tipe perpustakaan standar seperti std::vector
:
vector<int> a{10,20}; //Curly braces -> fills the vector with the arguments
vector<int> b(10,20); //Parentheses -> uses arguments to parametrize some functionality,
vector<int> c(it1,it2); //like filling the vector with 10 integers or copying a range.
vector<int> d{}; //empty braces -> default constructs vector, which is equivalent
//to a vector that is filled with zero elements
auto
?