Может ли кто-нибудь объяснить эту нотацию C++?

StackOverflow https://stackoverflow.com/questions/404934

  •  03-07-2019
  •  | 
  •  

Вопрос

if (vector1.x > ((float*)&vector1)[j])

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

Это было полезно?

Решение

Стандарт C++ гласит, что приведение указателя структуры (pods) к указателю типа ее первого элемента даст указатель на ее первый элемент:

struct a {
    float a1;
    float a2;
    float a3;
};

a o1; ((float*)&o1); // points to o1.a1

Я подозреваю, что код сказал компилятору не добавлять никаких дополнений между a1, a2 и a3, чтобы, если он индексирует указатель, он будет указывать именно на то число с плавающей запятой, которое ему нужно.Итак, выше

((float*)&o1)[1] // *would* return o1.a2

Это зависит от платформы, поскольку в стандартном C++ нельзя изменить заполнение.Посмотрите, как этот код устроен и прав ли я вообще :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top