我想知道,如果我使用一个完全静态的类的地址,是否可以保证其成员以正确的顺序对齐?我想对于在全局范围内定义的一组变量也是如此。
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
我知道在这种情况下,实例化类要好得多,但是我对这两个问题感到很好奇。谢谢。
最佳答案
不可以,C++标准没有在静态范围内指定对象在内存中的顺序。
C++标准也不保证类成员的相对顺序。