我正在浏览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];
}
Run Code Online (Sandbox Code Playgroud)
输出:
x: 2.8
y: 4.2
z: 9.5
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?为什么这种语法有效?Point类不包含重载operator [],此处此代码试图自动转换为浮动某处.
我以前从未见过这种用法 - 至少可以说这看起来很奇怪而且令人惊讶.
谢谢