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]); },显然它用于返回指向第一个元素的指针,但我不了解其机制,是重载还是函数指针?
-
函数调用运算符的可能重复项
-
@KarolyHorvath在我看来,链接问题更关注的是" double operator()()",而不是double * operator()()
-
不相关的细节。
-
@KarolyHorvath却令人困惑,链接的答案表明它被用作函子,它既是运算符重载又是函子?
-
它的运算符重载允许将该对象用作函子。
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); |
-
在我看来,这两者都是关于运算符重载的,唯一的区别是1-" double *()(){}"返回一个指针。 2-第二个括号不带参数。?
-
@lorniper是的,这些是重载函数。 一个带有两个参数,另一个没有。 函数重载并不关心返回类型。 功能参数必须不同才能重载功能。
-
谢谢 ! 因此,在这种情况下,将" double * operator()()"替换为" double * operator()(int i,int j)"是否合法?
-
@lorniper是正确的。