Мне было интересно, если я возьму адрес полностью статического класса, я гарантирую, что его члены будут выровнены в правильном порядке? Я предполагаю, что это относится и к группе переменных, определенных в глобальном масштабе.Стабильные переменные гарантируются, если я возьму его адрес?
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 buffer Buffer1 buffer1 ;, вместо этого вы можете избежать, по крайней мере, проблемы 'sizeof'. –
@Ken Y-N Да, определенно, это то, что у меня есть. Мне просто интересно, я изучаю все аспекты языка и пытаюсь понять, что я могу сделать со статической структурой. – Zebrafish