У меня есть класс для представления трехмерного вектора чисел с плавающей запятой:
class Vector3D
{
public:
float x, y, z;
float * const data;
Vector3D() : x(0.0), y(0.0), z(0.0), data(&x) {}
}
Мой вопрос: будут ли x, y и z последовательно размещаться в памяти, чтобы я мог назначить адрес x для данных, а затем использовать оператор индекса для данных для доступа к компонентам вектора как к массиву?
Например, иногда мне может потребоваться получить доступ к компонентам вектора напрямую:
Vector3D vec;
vec.x = 42.0;
vec.y = 42.0;
vec.z = 42.0;
А иногда я могу захотеть получить к ним доступ по смещению:
Vector3D vec;
for (int i = 3; i--; )
vec.data[i] = 42.0;
Будет ли второй пример иметь такой же эффект, как и первый, или я рискую перезаписать память, отличную от плавающих значений x, y и z?