外来操作符——它们为什么有用?

Exotic Operators - why are they useful?

本文关键字:为什么 有用 操作符      更新时间:2023-10-16

与其在Google上收集零散的信息(他们不懂符号),不如去问这个网站上的许多编程专家。

我想知道一些操作符:

  1. x->y vs (*x).y
  2. x.*y vs *(x.y)
  3. x->*y vs *(x).*y vs *(*(x).y) vs *(x->y)

彼此比较,哪个更快?

第一条只是为了方便,并且已经存在于c中。考虑:

x->y->z

(*(*x).y).z

其他两个操作符的作用和你想象的不一样。

x.*y

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

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. 它们是等价的,只是语法糖。

  3. 这是第一种和第二种情况混合在一起。