Hai cấu trúc này có tương thích với bố cục không?Các cấu trúc của các biến có cùng kiểu bố trí tương thích với một cấu trúc có chứa một mảng của kiểu đó không?
struct One {
float x, y, z;
};
struct Two {
float c[3];
};
Cả hai chứa 3 nổi, vì vậy trong một cách, mô tả này có thể được coi là đúng (từ N3797):
16 Hai tiêu chuẩn bố trí struct (khoản 9) các loại bố cục tương thích nếu họ có cùng số lượng thành viên dữ liệu không tĩnh và thành viên dữ liệu không tĩnh tương ứng (theo thứ tự khai báo) có loại tương thích bố cục (3.9).
N4659 có một văn bản khác nhau:
Trình tự ban đầu chung của hai tiêu chuẩn bố trí struct (khoản 12) loại là chuỗi dài nhất của các thành viên dữ liệu không tĩnh và ruộng bit- trong thứ tự khai báo, bắt đầu với thực thể đầu tiên trong mỗi các cấu trúc, sao cho các thực thể tương ứng có kiểu tương thích bố trí và cả hai thực thể đều không được biết hoặc cả hai đều là các số bit có cùng chiều rộng.
Hai loại cấu trúc bố cục tiêu chuẩn (Điều 12) là các lớp tương thích bố cục nếu trình tự ban đầu chung của chúng bao gồm tất cả các thành viên và trường của cả hai lớp (6.9).
Nếu câu trả lời là không, chúng không tương thích với bố cục, thì: đó có phải là ý định của ủy ban không? Có thể họ muốn One
và Two
tương thích với bố cục (có thể thành viên ủy ban đọc thông tin này và có thể làm rõ).
Câu hỏi bổ sung: được đảm bảo rằng sizeof(One)==sizeof(Two)
?
Mỗi người có thể chứa 3 phao, nhưng cái đầu tiên có 3 thành viên và cái thứ hai chỉ có một thành viên. Điều đó nói rằng 'std :: complex' được phép làm điều này vì vậy tôi không chắc chắn – NathanOliver
kích thước sẽ giống nhau –
Suy nghĩ về ** alignment **. .. nếu nó lớn hơn 4 byte ** thì không có **. Nhưng bạn có thể ép buộc nó (theo cách không di động). As-là trình biên dịch miễn phí để làm những gì tốt nhất (theo mục tiêu tối ưu hóa và kiến trúc của nó) –