【发布时间】:2017-12-16 07:22:10
【问题描述】:
当我在指向具有重载操作符()(又名函子)的类的指针上使用解引用运算符时 - 它就像一个魅力:
struct Functor {
int operator()(int a, float b) {
return a+b;
}
};
Functor g;
Functor * f = &g;
g(1,2.);
(*f)(1,.2);
f->operator()(1,2.f);
但形式
// f->(1,2.f); // doesn't compile (expected unqualified-id)
为什么会这样?
【问题讨论】:
-
f->()在 C++(或 C)中的语法无效,无论好坏。你是在问为什么语言设计者选择不允许它? -
@JohnZwinck 但是为什么语法不正确?我希望 -> 是 (*ptr) 的快捷方式,所以如果我们可以在取消引用和优先级括号之后应用 (*ptr)() - 为什么我们不能将 () 应用到 ->跨度>
-
f->是*f.的“别名”,不是你想的那样。 -
@Slava 哦,我明白了.. 现在因为点 '.' 才有意义
-
@barney
.*是 one 运算符——“指向成员的指针解引用运算符”。有指针时对应的运算符是->*。正确的语法是(pvar->*p1)(1,2)(或((*pvar).*p1)(1,2))。
标签: c++ operator-overloading operators