This question already has answers here:
Struct padding in C++

(4个答案)


5年前关闭。




据我所知,class和struct数据被一个变量另一个变量放置,例如:
class Foo
{
    int A;
    char B;
    float* C;
    double* D;
};

Foo Object;
char* ptr = &Object;

&(Object.A) == ptr;    // all these are true
&(Object.B) == ptr+sizeof(int);
&(Object.C) == ptr+sizeof(int)+sizeof(char);
&(Object.D) == ptr+sizeof(int)+sizeof(char)+sizeof(float*);

它总是这样工作吗?如果我在类中将所有这些数据都设为静态,那也行得通吗?

最佳答案

好吧,尽管所有评论都是正确的,但这些评论还是有点误导。 (也许因为这实际上是duplicate of an old question)

您最初的假设是“基本”正确的。好吧,基本上是

您唯一(至少大部分时间)可以依靠的是元素的顺序

元素的实际大小在平台和编译器之间差异很大。这本身就是一个问题,但是int在大多数情况下是32位,有时是16位甚至64位。

最重要的是,编译器可能会(或可能不会)在元素之间添加一些填充,有时取决于元素类型,有时不会。

结论:如果您编写的代码依赖于指针算法(如您建议的那样),您的代码将是平台相关的实现/编译器相关的

关于c++ - 类和结构数据放置C/C++ ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32592396/

10-17 01:25
查看更多