C++ double *() () { } 重载?

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

我见过这样的Class:

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]); },明明是用来return一个指向第一个元素的指针,但是我不明白其中的机制,是重载还是函数指针?

operator() 就是 function call operator.

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

Vec2D 定义了一个函数调用运算符 returns a double * 并且不接受任何输入。您可以在代码中将其用作

Vec2D foo;
double * bar = foo();

然后用

重载函数调用运算符
double & operator() (int i, int j){return ver[j_*i+j];} 

这为 Vec2D 定义了一个函数调用运算符,即 returns 一个 double & 并接受 2 ints。它会像

一样使用
Vec2D foo;
double & bar = foo(0, 0);