了解指向成员的运营商

6 c++ pointers compiler-errors pointer-to-member dereference

我从c ++练习册中复制了这个程序.幕后发生了什么?

预期的产出是:

sum = 30 sum = 70

#include<iostream>
using namespace std;

class M
{
    int x;
    int y;
public:
    void set_xy(int a, int b)
    {
        x=a;
        y=b;
    }
    friend int sum(M m);
};

int sum (M m);
//so far so good, problem begins from here. what's happening after here?
{                               
    int M ::*px = &M ::x;
    int M ::*py = &M ::y;
    M *pm =&m;
    int s= m.*px+ pm->*py;
    return s;
}

int main()
{
    M n;
    void (M :: *pf)(int, int) = &M ::set_xy;
    (n.*pf)(10, 20);
    cout <<"sum=" << sum(n) << endl;

    M *op= &n;
    (op-> *pf)(30,40);
    cout << "sum=" << sum(n)<< endl;

    cin.ignore();
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

iam*_*ind 1

问题是因为处有额外的空格op-> *pf

 (op->*pf)(30,40);  // ok
Run Code Online (Sandbox Code Playgroud)

我想 @fefe 可能已经在评论中说出了原因。->*是单个运算符,类似于.*. 因此,如果将这两者分开,则会导致不同的语法,从而导致编译器错误。

  • @jeet.mg:运算符是`-&gt;*`。你不能在任何你喜欢的地方放置空格(比如“delete”与“delete”不同) (3认同)