This question already has answers here:
Struct padding in C++
(4个答案)
5年前关闭。
据我所知,class和struct数据被一个变量另一个变量放置,例如:
它总是这样工作吗?如果我在类中将所有这些数据都设为静态,那也行得通吗?
(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/