c++ - ->* 运算符到底是什么?

标签 c++ operators

我以前从未使用过它,只是在一篇文章中偶然发现它...我认为它等同于 *x->y 但显然不是。

这是我尝试过的,但给了我一个错误:

struct cake {
 int * yogurt;
} * pie;

int main(void) {
 pie = new cake;
 pie->yogurt = new int;
 return pie->*yogurt = 4;
}

最佳答案

当你有指向成员函数的指针时使用它。

当你有一个指向一个类的函数的指针时,你可以像调用任何成员函数一样调用它

object.membername( ... )

objectptr->成员名( ... )

但是当你有一个成员函数指针时,需要在 .或 -> 以便编译器理解接下来是变量,而不是要调用的函数的实际名称。

这是一个如何使用它的例子。

class Duck
{
public:

  void quack() { cout << "quack" << endl; }
  void waddle() { cout << "waddle" << endl; }
};

typedef void (Duck::*ActionPointer)();

ActionPointer myaction = &Duck::quack;

void takeDuckAction()
{    
    Duck myduck;
    Duck *myduckptr = &myduck;

    (myduck.*myaction)();
    (myduckptr->*myaction)();
}

关于c++ - ->* 运算符到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682072/

相关文章:

c++ - 在 boost::graph 中访问 std::shared_ptr 的成员函数?

Python 相当于 !运算符(operator)

c - 如果两个函数都返回 boolean 值,使用按位运算符组合它们是否安全?

matlab - 运算符 "dot"(.) 是什么意思?

c++ - 继承运算符的问题*

c++ - 无法按索引访问 vector 值

c++ - 数值食谱中显然 undefined variable

c++ - 使用 Used-defined 转换运算符时出现段错误

c++ - P线程问题

c++ - 在不声明变量的情况下存储 "variables"