Theo định nghĩa, khởi tạo mặc định là khởi tạo xảy ra khi không có khởi tạo nào khác được chỉ định; ngôn ngữ C ++ đảm bảo với bạn rằng bất kỳ đối tượng nào mà bạn không cung cấp trình khởi tạo rõ ràng sẽ được khởi tạo mặc định (C ++ 11 §8.5 / 11). Điều đó bao gồm các đối tượng thuộc loại std::array<T, N>
và T[N]
.
Lưu ý rằng có những kiểu mà khởi tạo mặc định không có tác dụng và để lại giá trị của đối tượng là không xác định: bất kỳ kiểu không phải lớp, không phải mảng nào (§8.5 / 6). Do đó, một mảng đối tượng được khởi tạo mặc định với các kiểu như vậy sẽ có giá trị không xác định, ví dụ:
int plain_int;
int c_style_array[13];
std::array<int, 13> cxx_style_array;
Cả mảng kiểu c và std::array
được lấp đầy bởi các số nguyên có giá trị không xác định, cũng như plain_int
có giá trị không xác định.
Có cú pháp nào sẽ hoạt động trên tất cả các mảng (bao gồm cả các mảng có kích thước bằng 0) để khởi tạo tất cả các phần tử về giá trị mặc định của chúng không?
Tôi đoán rằng khi bạn nói "với giá trị mặc định của chúng", bạn thực sự có nghĩa là "khởi tạo tất cả các phần tử thành T{}
". Đó không phải là khởi tạo mặc định , mà là khởi tạo giá trị (8,5 / 7). Bạn có thể yêu cầu khởi tạo giá trị khá dễ dàng trong C ++ 11 bằng cách cung cấp cho mỗi khai báo một bộ khởi tạo trống:
int plain_int{};
int c_style_array[13]{};
std::array<int, 13> cxx_style_array{};
Điều này sẽ khởi tạo giá trị lần lượt tất cả các phần tử của mảng, dẫn đến plain_old_int
và tất cả các thành viên của cả hai loại mảng đều được khởi tạo bằng 0.
T x[N]
cú pháp.