Классы хранят данные членов в последовательной памяти?

Краткая версия этого вопроса: приводит ли указатель к первому элементу данных класса к указателю на все его элементы данных?

Обсуждение: Я

Я читаю пример кода, и это интересно. Когда конкретная функция (в этом случаеglUniformMatrix4fv Функция C из OpenGL) принимает в качестве параметра массив, который передается обычным способом C с использованием указателя на адрес массива 'первый элемент, как показано ниже:

glUniformMatrix4fv(glvariable, 1, 0, &newmatrix[0]); // ссылаемся на newmatrix

Этот разработчик имеет класс C ++ для создания матрицы 4X4, всего 16 операций с плавающей запятой. Однако члены данных этого класса разделены на 4 отдельных вектора по 4 члена данных каждый:

Вот данные членов класса:

vec4 x;
vec4 y;
vec4 z;
vec4 w;

vec4 Класс, в свою очередь, предоставляет следующие члены данных:

T x;
T y;
T z;
T w;

Затем он создает функцию, указывающую только на первыйvec4 x элемент данных:

    const T* Pointer() const
{
    return &x.x;
}

И каким-то образом это чудесным образом переводит всех 4vec4 объекты и их соответствующие 4 компонента: I '

glUniformMatrix4fv(modelviewUniform, 1, 0, modelviewMatrix.Pointer());

Я довольно новичок в C ++, но меня удивило, что вы можете указать только один элемент данных и ожидать, что все остальные также будут отправлены. Это потому, что класс определяет их в определенном порядке? Что если они были определены в другом порядке в определении класса?

Ответы на вопрос(1)

Ваш ответ на вопрос