Estaba buscando a través de la fuente de OpenDE y me encontré con algún uso de sintaxis extraña del operador de indexación de matriz '[]' en una clase. Aquí está un ejemplo simplificado para mostrar la sintaxis:¿Qué significa esta sintaxis de C++ y por qué funciona?
#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];
}
Salida:
x: 2.8
y: 4.2
z: 9.5
¿Qué está pasando aquí? ¿Por qué funciona esta sintaxis? La clase Point no contiene operator []
sobrecargado y aquí este código intenta hacer una conversión automática para flotar en alguna parte.
Nunca antes había visto este tipo de uso: definitivamente parece inusual y sorprendente por decir lo menos.
Gracias
Tenga en cuenta que para saber si está usando 'operator []' o una función de conversión de puntero, puede hacer esta extraña prueba: si '0 [p]' funciona, está usando una conversión de puntero. Si no funciona, pero si 'p [0]' funciona, está usando 'operator []'. –