Запрос об объявлениях переменных класса в C ++

У меня есть класс для представления трехмерного вектора чисел с плавающей запятой:

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?

5
задан Matt 28 June 2013 в 18:51
поделиться