[英]C++ anonymous structs?
我之前的一篇文章提出了匿名結構的話題,有幾位評論員說這些在 C++ 中是不允許的。
這是我經常使用的結構:這是合法的 C++ 嗎?
const int HeaderSize = 8192;
struct Header
{
union
{
struct
{
int r;
// other members
};
unsigned char unused[HeaderSize]; // makes Header struct's size remain constant as members are added to the inner struct
};
// Default constructor
Header()
{
}
};
在標准 C++ 中不能有匿名結構(請參閱此處了解原因),盡管主流編譯器將其作為擴展提供。
我猜你打算將二進制數據直接讀入這個結構。 這在 Modern C++ 中是不受歡迎的,最好使用數據序列化。
如果您堅持直接閱讀結構,也許另一種選擇是:
struct Header
{
int r;
// other members;
};
struct Image
{
Header hdr;
char padding[HeaderSize - sizeof(Header)];
// rest of image
};
C++ 中沒有匿名結構,只有匿名聯合。 所以你必須為結構提供一個名稱。
此外,匿名聯合也不能有嵌套類型,這意味着您也必須將結構從聯合中取出。
因此,結合這兩個位,這意味着您需要編寫:
const int HeaderSize = 8192;
struct Header
{
struct Members
{
int r;
// other members
};
union
{
Members members;
unsigned char unused[HeaderSize]; // makes Header struct's size remain constant as members are added to the inner struct
};
// Default constructor
Header()
{
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.