定义一个充满成员的结构时,是否为这个结构类型的每个变量创建了这些成员?

时间:2016-10-25 00:20:45

标签: c++ c struct

所以有一个代码:

struct ACDC
{
  double in, out, A, B, C;
};

struct VALUE
{
  struct ACDC I, V;
};

struct VALUE motor1, motor2, DC;

当我声明这个结构的一些变量如motor1,motor2,DC1,DC2时,我不需要为所有变量使用所有成员。我只需要像:

motor1.I.A; motor1.I.B; motor1.I.C;
motor2.I.A; motor2.I.B; motor2.V.A; motor2.V.B;
DC.I.in;
DC.I.out;

所以问题是,是否为变量声明了其他成员并在创建时占用了内存中的空间?如果是这样,那么只有在第一次调用时才创建它们?

由于

2 个答案:

答案 0 :(得分:3)

结构描述了内存布局。当你实例化一个时,它为整个事物分配内存,成员名称本质上是该分配的偏移量的助记符,这需要在编译时知道它们。

如果你想要可选元素,你必须使用指针或可能使用一些复杂的模板shenanigans而不是C ++中的指针。

因为你指定了两种截然不同的语言(C vs C ++),所以我不能给出具体的惯用语。

但是,您给出的示例看起来像是糟糕/草率的设计,而不是真正需要变量可选成员身份。

您可能希望将您尝试解决的问题显示为新问题。

答案 1 :(得分:1)

正确答案取决于

如果您使用编译器的高级优化(例如-O2),那么除非这些变量在某处被使用,否则它们将被编译器取消。否则将为他们分配内存。

同样关于单个struct成员,是的,结构将作为一个整体而不是成员分配(检查填充也是为了更好地理解)。