2012-03-06 31 views
9

Tôi chạy dưới đây với g++ -std=c++0x pod_test.cpp trên g ++ 4.6.2 (mingw). Tôi gặp lỗi trên A4. Tại sao không phải là A4 POD?Tại sao đây không phải là loại POD?

#include <iostream> 
#include <new> 
#include <cstring> 

using namespace std; 

struct A { 
    int a, b; 
    char c; 
}; 
struct A2 { 
    short buf[1]; 
}; 
struct A3:A { 
}; 
struct A4:A { 
    short buf[1]; 
}; 
static_assert(std::is_pod<A>::value, "Struct must be a POD type"); 
static_assert(std::is_pod<A2>::value, "Struct must be a POD type"); 
static_assert(std::is_pod<A3>::value, "Struct must be a POD type"); 
static_assert(std::is_pod<A4>::value, "Struct must be a POD type"); 

int main(){} 

Trả lời

16

Nó không POD vì nó phá vỡ quy tắc này cho các lớp học bố trí tiêu chuẩn:

- hoặc không có thành viên dữ liệu không tĩnh trong lớp có nguồn gốc nhất và tại hầu hết các lớp học một cơ sở với phi thành viên dữ liệu tĩnh hoặc không có các lớp cơ sở có thành viên dữ liệu không tĩnh

Chỉ một lớp trong mạng kế thừa có thể có thành viên dữ liệu không tĩnh. Trong trường hợp này, cả hai số AA4 đều có.

+0

có tối đa một lớp cơ sở với các thành viên dữ liệu không tĩnh. Trong tất cả các ví dụ. Quy tắc này áp dụng như thế nào? – Mordachai

+1

"không có thành viên dữ liệu không tĩnh trong lớp dẫn xuất nhiều nhất ** và ** tối đa một lớp cơ sở với các thành viên dữ liệu không tĩnh". 'A4' có các thành viên dữ liệu không tĩnh. –

+0

Tôi nghĩ rằng tôi liên kết với bạn. Tôi nhớ giáo phái 7-lookups-ok 9.0.7. Chấp nhận khi tôi có thể. Tôi bỏ qua ',' trước hoặc. Không có thắc mắc tại sao 'hoặc' không có ý nghĩa. –

Các vấn đề liên quan