我想知道,如果我使用一个完全静态的类的地址,是否可以保证其成员以正确的顺序对齐?我想对于在全局范围内定义的一组变量也是如此。

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++标准也不保证类成员的相对顺序。

09-07 01:28