Seo*_*ong 1 c++ pod standard-layout c++11
我读了一篇关于POD,Trivial,Standard-layout类的非常好的文章.但我对标准布局类的规则有疑问:
要么在大多数派生类中没有非静态数据成员,要么最多只有一个具有非静态数据成员的基类,或者没有带有非静态数据成员的基类
我写了一个源代码:
#include <iostream>
struct A {
int a;
};
struct B {
int b;
};
struct C : A, B {
int c;
};
int main() {
C c = {}; // initialize C
c.a = 0xffffffff;
c.b = 0xeeeeeeee;
c.c = 0xdddddddd;
std::cout << std::hex << *(reinterpret_cast<int*>(&c) ) << std::endl;
std::cout << std::hex << *(reinterpret_cast<int*>(&c)+1) << std::endl;
std::cout << std::hex << *(reinterpret_cast<int*>(&c)+2) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
ffffffff
eeeeeeee
dddddddd
Run Code Online (Sandbox Code Playgroud)
我觉得它运作得很好.在VS2015中使用调试器,它看起来很好.
那么,为什么在继承的标准布局规则中有非静态成员的限制?
继续阅读:
标准布局类对于与使用其他编程语言编写的代码进行通信非常有用.
您引用的规则要求对象的继承层次结构中只有一个类由数据组成.因此,这种类型"易于"用于与用其他编程语言编写的代码进行通信,这些代码可以非常不同地实现继承(或者像C一样,根本不实现).
规则并不意味着您不能拥有更复杂的类型,或者您不能以各种异国情调和有趣的方式使用这些类型; 它只是意味着它们不会被特别称为"标准布局"类型,其后果与不属于该类别的类型一致.
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |