Klasy przechowują elementy danych w pamięci sekwencyjnej?

Krótka wersja tego pytania: Czy wskaźnik do pierwszego elementu danych klasy powoduje wyświetlenie wskaźnika do wszystkich jego członków danych?

Dyskusja:

Czytam przykładowy kod i to jest interesujące. Kiedy określona funkcja (w tym przypadkuglUniformMatrix4fv Funkcja C z OpenGL) przyjmuje jako parametr tablicę, która jest przekazywana we wspólny sposób C za pomocą wskaźnika na adres pierwszego elementu tablicy, w następujący sposób:

glUniformMatrix4fv(glvariable, 1, 0, &newmatrix[0]); // odnosząc się do nowej macierzy

Ten programista ma klasę C ++ do tworzenia macierzy 4X4, co daje w sumie 16 elementów pływających. Jednak członkowie danych tej klasy są podzieleni na 4 osobne wektory po 4 członków danych:

Oto członkowie danych klasy:

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

Thevec4 klasa z kolei zapewnia tych członków danych:

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

Następnie tworzy funkcję wskazującą tylko pierwsząvec4 x członek danych:

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

I jakoś to cudownie przekłada się na wysyłanie wszystkich 4vec4 obiekty i ich odpowiednie 4 komponenty:

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

Jestem dość nowy w C ++, ale zaskoczyło mnie to, że można wskazać tylko jednego członka danych i oczekiwać, że cała reszta zostanie wysłana. Czy dlatego, że klasa definiuje je w określonej kolejności? Co jeśli zostały zdefiniowane w innej kolejności w definicji klasy?

questionAnswers(1)

yourAnswerToTheQuestion