外来运营商 - 为什么它们有用?

时间:2014-07-15 07:45:42

标签: c++ operator-keyword

很高兴,而不是在谷歌(不懂符号)上收集零散的信息,向网站上的许多编程专业人士询问。

我想知道一些运营商:

  1. x->y vs (*x).y
  2. x.*y vs *(x.y)
  3. x->*y vs *(x).*y vs *(*(x).y) vs *(x->y)
  4. 相互比较,是一个还是更快?

2 个答案:

答案 0 :(得分:4)

1号只是为了方便而已经存在于C.考虑:

x->y->z

VS

(*(*x).y).z

其他两名经营者并没有按照您的想法行事。

x.*y

y引用的对象上调用x指向的成员函数,而

x->*y

做同样的事情,但是x是一个指针。

以下是通过指针调用成员函数的示例:

struct Foo {
    void bar();
};

int main() {
    typedef void (Foo::*foo_mem_ptr)();
    // y points to Foo::bar
    foo_mem_ptr y = &Foo::bar;
    Foo x;
    // call y with x as this
    x.*y();
    // same for pointer to x
    Foo *px = &x;
    px->*y();
}

答案 1 :(得分:2)

  1. 据我所知,这些运营商在基本实施方面完全没有区别 - 它们是等价的。但是,您可以覆盖 *->以使其具有不同的行为。

  2. 它们是等价的,它只是语法糖。

  3. 将第1和第2个案件混合在一起。