【发布时间】:2016-11-24 02:22:38
【问题描述】:
我想知道,如果我获取一个完全静态类的地址,我能保证它的成员以正确的顺序排列吗?我想这也适用于在全局范围内定义的一组变量。
struct Buffer1
{
static float val1;
static float val2;
};
void readBuffer(void* buffer){ /*Do something*/}
int main()
{
// Sending the buffer
readBuffer(&Buffer1); // Type name is not allowed
readBuffer(&Buffer1::val1); // Does work, wondering if data will be correct
return 0;
}
另外,有没有办法获取一组静态或全局变量的大小?喜欢:
// Getting the size of the buffer
size_t sizeOfBuffer = sizeof(Buffer1); // Wrong size, doesn't measure static members
sizeOfBuffer = sizeof(Buffer1::val1) + sizeof(Buffer1::val2); // Does work but doesn't account for data padding/alignment, and is also tedious to change
我知道在这种情况下使用实例化类会更好,但我对这两个问题很好奇。谢谢。
【问题讨论】:
-
只需将这些变量放在一个结构中
-
您还会遇到结构填充问题。你不能改用
struct Buffer1 { float val1, val2; }; static Buffer1 buffer1;,这样你至少可以避免sizeof问题。 -
@Ken Y-N 是的,当然,我目前就是这样。我只是想知道,我正在学习语言的来龙去脉,并试图看看我可以用静态结构做什么。
标签: c++ variables static alignment size