所以有一个代码:
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;
所以问题是,是否为变量声明了其他成员并在创建时占用了内存中的空间?如果是这样,那么只有在第一次调用时才创建它们?
由于
答案 0 :(得分:3)
结构描述了内存布局。当你实例化一个时,它为整个事物分配内存,成员名称本质上是该分配的偏移量的助记符,这需要在编译时知道它们。
如果你想要可选元素,你必须使用指针或可能使用一些复杂的模板shenanigans而不是C ++中的指针。
因为你指定了两种截然不同的语言(C vs C ++),所以我不能给出具体的惯用语。
但是,您给出的示例看起来像是糟糕/草率的设计,而不是真正需要变量可选成员身份。
您可能希望将您尝试解决的问题显示为新问题。
答案 1 :(得分:1)
正确答案取决于。
如果您使用编译器的高级优化(例如-O2),那么除非这些变量在某处被使用,否则它们将被编译器取消。否则将为他们分配内存。
同样关于单个struct
成员,是的,结构将作为一个整体而不是成员分配(检查填充也是为了更好地理解)。