Stavo guardando attraverso l'origine di OpenDE e mi sono imbattuto in un uso di sintassi strana dell'operatore di indicizzazione dell'array '[]' su una classe. Ecco un esempio semplificato per mostrare la sintassi:Che cosa significa questa sintassi C++ e perché funziona?
#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];
}
uscita:
x: 2.8
y: 4.2
z: 9.5
Che cosa sta succedendo qui? Perché questa sintassi funziona? La classe Point non contiene sovraccarico operator []
e qui questo codice sta provando a fare una conversione automatica per fluttuare da qualche parte.
Non ho mai visto questo tipo di utilizzo prima - sembra decisamente insolito e sorprendente a dir poco.
Grazie
Nota che per scoprire se sta usando 'operator []' o una funzione di conversione puntatore puoi fare questo strano test: Se '0 [p]' funziona, sta usando una conversione puntatore. Se non funziona, ma se 'p [0]' funziona, sta usando 'operator []'. –