Nuc*_*ear 25 c++ inheritance pod
比方说,我有一个struct RGB,我想创建struct RGBA,继承RGB:
struct RGB {
unsigned char r;
unsigned char g;
unsigned char b;
};
struct RGBA: RGB {
unsigned char a;
};
Run Code Online (Sandbox Code Playgroud)
两者都将用于读取未压缩的图像数据:
RGBA *pixel=static_cast<RGBA *>(image->uncompressed_data);
Run Code Online (Sandbox Code Playgroud)
问题:关于内存布局,这样安全struct RGBA吗?有人保证:
unsigned char a之后RGB struct(不是之前)struct RGB和参数来自struct RGBA?会有#pragma pack帮助吗?这都是关于继承期间的内存布局.
Mik*_*our 15
不,布局不保证.唯一的保证是标准布局类; 这类课程的一个条件就是它
要么在大多数派生类中没有非静态数据成员,要么最多只有一个具有非静态数据成员的基类,或者没有带有非静态数据成员的基类
换句话说,所有数据成员必须位于同一个类中,而不是多个.
有否有关派生成员的内存布局保障和演员是不是安全的.
由于你有继承,也可能有填充,这不是微不足道的.
§9类
1 POD struct109是一个既简单类又是标准布局类的类,并且没有非POD结构类型的非静态数据成员,非POD联合(或此类类型的数组).类似地,POD联合是一个既简单的类又是标准的布局类的联合,并且没有非
另外std::is_pod<RGBA>是不是一个POD
std::cout << std::boolalpha;
std::cout << std::is_pod<RGBA>::value << '\n';
Run Code Online (Sandbox Code Playgroud)
结果是假的.看现场演示