Bạn cần phải sử dụng danh sách khởi để khởi tạo các thành viên liên tục, tài liệu tham khảo và lớp cơ sở
Khi bạn cần phải khởi tạo thành viên liên tục, tài liệu tham khảo và truyền tham số cho constructor của lớp cha, như đã đề cập trong ý kiến, bạn cần phải sử dụng danh sách khởi tạo.
struct aa
{
int i;
const int ci; // constant member
aa() : i(0) {} // will fail, constant member not initialized
};
struct aa
{
int i;
const int ci;
aa() : i(0) { ci = 3;} // will fail, ci is constant
};
struct aa
{
int i;
const int ci;
aa() : i(0), ci(3) {} // works
};
Ví dụ (không đầy đủ) lớp/struct chứa tài liệu tham khảo:
struct bb {};
struct aa
{
bb& rb;
aa(bb& b) : rb(b) {}
};
// usage:
bb b;
aa a(b);
Và ví dụ về khởi tạo lớp cơ sở mà đòi hỏi một tham số (ví dụkhông có hàm tạo mặc định nào):
struct bb {};
struct dd
{
char c;
dd(char x) : c(x) {}
};
struct aa : dd
{
bb& rb;
aa(bb& b) : dd('a'), rb(b) {}
};
như Richard cho biết, nó tạo sự khác biệt nếu các giá trị đó là các loại nguyên thủy và const, danh sách khởi tạo là cách duy nhất để gán giá trị cho các thành viên const. – thbusch
Nó chỉ hoạt động như được mô tả khi các biến không phải là tham chiếu hoặc hằng số, nếu chúng là hằng số hoặc tham chiếu, nó sẽ không biên dịch mà không sử dụng danh sách khởi tạo. – stefanB