완전히 정적 인 클래스의 주소를 가져 가면 멤버가 올바른 순서로 정렬된다는 보장이 있습니까? 글로벌 범위에서 정의 된 변수 그룹에 대해서도 마찬가지입니다.주소를 가져 가면 정적 변수의 순서가 보장됩니까?
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;
}
또한 static 또는 global 변수 그룹의 크기를 취하는 방법이 있습니까? Like :
// 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 네, 물론, 그것이 현재 가지고있는 방법입니다. 저는 궁금해서 언어의 기능에 대해 배우고 static 구조체로 무엇을 할 수 있는지 알아 내려고했습니다. – Zebrafish