Что означает этот синтаксис C ++ и почему он работает?

Я просматривал исходный код OpenDE и наткнулся на странное использование синтаксиса оператора индексации массива '[]' в классе. Вот упрощенный пример, демонстрирующий синтаксис:

#include <iostream>

class Point
{
public:
    Point() : x(2.8), y(4.2), z(9.5) {}

    operator const float *() const
    {
        return &x;
    }

private:
    float x, y, z;
};

int main()
{
    Point p;
    std::cout << "x: " << p[0] << '\n'
              << "y: " << p[1] << '\n'
              << "z: " << p[2];
}

Вывод:

x: 2.8
y: 4.2
z: 9.5

Что здесь происходит? Почему этот синтаксис работает? Класс Point не содержит перегруженного оператора [] , и здесь этот код пытается выполнить автоматическое преобразование в какое-то положение с плавающей точкой.

Я никогда раньше не видел такого использования - это определенно выглядит необычно и, мягко говоря, удивительно.

Спасибо

15
задан greatwolf 15 June 2011 в 01:39
поделиться