📜  ->* 运算符 (1)

📅  最后修改于: 2023-12-03 14:59:00.728000             🧑  作者: Mango

关于 '->* 运算符'

在C++中,箭头运算符 -> 通常用于访问对象成员的指针。而当它与星号 * 结合使用,即形如 ->* 的时候,它可以用于访问指向指针成员的指针。

语法

->* 运算符的语法如下:

pointer_to_pointer ->* pointer_to_member

其中,pointer_to_pointer 是一个指向指针的指针,而 pointer_to_member 是一个指向该指针所指对象的成员的指针。

使用方法

当我们需要通过一个指针来访问它所指对象的成员时,可以使用箭头运算符 ->。例如:

struct Person {
    int age;
};

Person person;
Person *p = &person;
p->age = 20;  // 使用箭头运算符来访问 age 成员

而当我们想访问一个指向指针的指针的成员时,就可以使用 ->* 运算符了。例如:

struct Person {
    int age;
    void sayHello() { std::cout << "Hello, I am " << age << " years old." << std::endl; }
};

Person person;
Person *p = &person;
Person **pp = &p;
void (Person::*func)() = &Person::sayHello;
(*pp)->*func();  // 输出:Hello, I am 0 years old.
p->age = 20;
(*pp)->*func();  // 输出:Hello, I am 20 years old.

在上面的例子中,我们定义了一个 Person 结构体,并定义了一个指向 person 的指针 p,以及一个指向 p 的指针 pp。我们还定义了一个 sayHello 成员函数的指针 func,并使用 -&gt;* 运算符来调用这个指针所指向的函数。

注意事项

使用 -&gt;* 运算符时需要注意以下几点:

  • -&gt;* 运算符的优先级很低,要注意加上括号。
  • 调用成员函数时,需要将成员函数的指针定义为函数指针类型并加上其参数列表。
  • 如果指向指针的指针为空指针,那么在使用 -&gt;* 运算符时会触发段错误。因此在使用之前最好先进行指针是否为空的判断。

关于 -&gt;* 运算符的内容就讲解这些,希望对你有帮助!