Theo cppreference.com
Nếu số lượng mệnh đề khởi tạo ít hơn số lượng thành viên [và cơ sở (kể từ C ++ 17)] hoặc danh sách trình khởi tạo hoàn toàn trống, các thành viên còn lại [và cơ sở (kể từ C ++ 17)] được khởi tạo [bởi Các trình khởi tạo thành viên mặc định, nếu được cung cấp trong định nghĩa lớp và mặt khác (kể từ C ++ 14)] bởi các danh sách trống, theo các quy tắc khởi tạo danh sách thông thường (thực hiện khởi tạo giá trị cho các loại không phải lớp và các lớp không tổng hợp với các hàm tạo mặc định và khởi tạo tổng hợp cho các tổng hợp). Nếu một thành viên của loại tham chiếu là một trong những thành viên còn lại, chương trình không được định dạng.
Foo
không có bộ khởi tạo thành viên mặc định ( int b{0};
), do đó b
sẽ được khởi tạo bằng cách khởi tạo danh sách với một danh sách trống, có nghĩa là khởi tạo giá trị cho các loại không phải là lớp : b = int() // = 0
.
struct Foo { int a{}; int b{}; };
nhớ các dấu ngoặc nhọn sau tên biến. sau đó bạn sẽ luôn nhận được các giá trị khởi tạo. nếu bạn cần khởi tạo với các giá trị khác, với hành vi được xác định, bạn cần viết một ctor giống như cho mọi lớp khác