Может кто-нибудь объяснить эту нотацию C ++? - PullRequest
3 голосов
/ 01 января 2009
if (vector1.x > ((float*)&vector1)[j])

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

1 Ответ

11 голосов
/ 01 января 2009

Стандарт 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 ++. Узнайте, как этот код упорядочивает его, и прав ли я вообще:)

...