này biên dịch hoàn toàn tốt đẹp với các trình biên dịch MSVC hiện tại:uninitialized const
struct Foo
{
} const foo;
Tuy nhiên, nó không biên dịch với g hiện ++ biên dịch:
error: uninitialized const 'foo' [-fpermissive]
note: 'const struct Foo' has no user-provided default constructor
Nếu tôi cung cấp một constructor mặc định bản thân mình, nó hoạt động:
struct Foo
{
Foo() {}
} const foo;
Đây có phải là trường hợp khác của MSVC quá dễ chấp nhận hay là quá mức nghiêm ngặt ở đây?
Câu hỏi tuyệt vời Mr Overflow. –
Bản sao: http://stackoverflow.com/questions/5335836/why-a-const-object-of-an-empty-class-cant-be-created http://stackoverflow.com/questions/7411515/why- do-c-require-a-user-cung cấp-mặc định-constructor-to-default-construct-a trong số những thứ khác. – GManNickG
Tôi không thể sao chép điều này trên GCC 4.6.1, với bất kỳ tùy chọn phương ngữ nào. Nó chỉ hoạt động nếu tôi cài đặt biến thành viên (như 'int a;') và lỗi chính xác hơn nhiều: ''const struct Foo' không có hàm tạo mặc định do người dùng cung cấp và hàm tạo ngầm được định nghĩa không khởi tạo 'int Foo :: a'' –