我在浏览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类不包含重载的operator [],在此,此代码试图进行自动转换以浮于某处。

我以前从未见过这种用法-至少可以肯定地说,它看起来确实很不寻常且令人惊讶。

谢谢

最佳答案

p被隐式转换为const float* const,它指向x。因此*px*(p+1)y,依此类推。
当然,以这种方式做是一个很奇怪的想法(而且令人困惑!)。通常最好将x,y和z存储在一个数组中,并且如果他们真的想用这种方式做事,则可以使用函数来获取整个数组。

关于c++ - 这种C++语法是什么意思,为什么起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3632746/

10-13 08:29