关于指针:C ++双*()(){}重载?

C++ double *() () { } overloading?

我看过这样的课:

1
2
3
4
5
6
7
8
9
10
class Vec2D {
    int i_;
    int j_;
    vector<double> vec;

public:
    Vec2D(int i, int j): i_(i),j_(j) {vec.assign(i_*j_,0);}
    double & operator() (int i, int j){return ver[j_*i+j];} // overloading
    double * operator()(){return &(vec[0]); }               // ???
};

我了解double & operator()用于运算符重载。

至于double * operator()(){return &(vec[0]); },显然它用于返回指向第一个元素的指针,但我不了解其机制,是重载还是函数指针?


operator()是函数调用运算符。

1
double * operator()(){return &(vec[0]); }

Vec2D定义一个函数调用操作符,该操作符返回double *并且不接受任何输入。 您将在代码中使用它作为

1
2
Vec2D foo;
double * bar = foo();

然后,您可以使用重载函数调用运算符

1
double & operator() (int i, int j){return ver[j_*i+j];}

这为Vec2D定义了一个函数调用操作符,该操作符返回double &并接收2个int。 它会像

1
2
Vec2D foo;
double & bar = foo(0, 0);