xem xét việc kê khai như sau:Điều gì xảy ra với việc khởi tạo nội tuyến của std :: array?
#include <array>
struct X
{
//std::array<bool,3> arr={false,false,false};
bool brr[3]={false,false,false};
};
Như là, nó biên dịch thông thường bằng g ++ 5.2. Nhưng nếu tôi bỏ ghi chú std::array
, tôi nhận được một lỗi:
test.cpp:5:46: error: array must be initialized with a brace-enclosed initializer
std::array<bool,3> arr={false,false,false};
^
test.cpp:5:46: error: too many initializers for ‘std::array<bool, 3u>’
OTOH, tuyên bố này hoạt động mà không vấn đề bên trong main()
. Ngoài ra, khởi tạo sau không hoạt động bên trong struct X
:
std::array<bool,3> arr={{false,false,false}};
Tại sao tôi không thể sử dụng khởi tạo đơn giản với dấu ngoặc đơn trong định nghĩa struct?
Lưu ý, trong C++ 11 như trái ngược với C++ 14 có trong initializers lớp [làm cho strut một không tổng hợp] (http://stackoverflow.com/q/27118535/1708801). –