Я просматривал исходный код 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 не содержит перегруженного оператора []
, и здесь этот код пытается выполнить автоматическое преобразование в какое-то положение с плавающей точкой.
Я никогда раньше не видел такого использования - это определенно выглядит необычно и, мягко говоря, удивительно.
Спасибо