Code:công đoàn không thể chứa một đối tượng mà có chức năng ảo
struct A{
int a;
virtual void f(){}
};
union B{
A ob;
};
Compile-time Error:
C:\to\main.cpp|9|error: member 'A B::ob' with constructor not allowed in union|
C:\to\main.cpp|9|error: member 'A B::ob' with copy assignment operator not allowed in union|
||=== Build finished: 2 errors, 0 warnings ===|
C++ 03 Tiêu chuẩn:
An object of a class with a non-trivial constructor (12.1), a non-trivial copy constructor (12.8), a non-trivial destructor (12.4), or a non-trivial copy assignment operator (13.5.3, 12.8) cannot be a member of a union, nor can an array of such objects. If a union contains a static data member, or a member of reference type, the program is ill-formed.
Sta ndard không nói bất cứ điều gì về một đối tượng của một lớp với một hàm ảo, và từ lỗi, trình biên dịch phàn nàn về hàm tạo và toán tử gán-sao chép mà tôi không sử dụng. đây có phải là lỗi trình biên dịch không? Im sử dụng gcc.
Bằng không tầm thường, nghĩ rằng POD (http://en.wikipedia.org/wiki/Plain_old_data_structure) – Benj
@Benj Tôi không biết những gì không tầm thường có nghĩa là, nhưng im chắc chắn nó không POD vì nó A có thể có một lớp cơ sở, trong này tôi không nhận được một lỗi, vì vậy dữ liệu thành viên công đoàn không phải là một POD. – AlexDan
Nếu bạn xem bài viết tôi đã tham chiếu, bạn sẽ thấy rằng các công đoàn được đề cập cụ thể liên quan đến POD. Cũng có thể cho một lớp là POD. – Benj