C++ operator ->* and .*
本问题已经有最佳答案,请猛点这里访问。
早上好,
我遇到了这个问题,但是我对Wikipedia上列出的"成员指向的对象..."类型运算符特别感兴趣。
我从来没有在实际代码的上下文中看到过这个,所以这个概念对我来说似乎有些深奥。
我的直觉说应该按如下方式使用它们:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | struct A { int *p; }; int main() { { A *a = new A(); a->p = new int(0); // if this did compile, how would it be different from *a->p=5; ?? a->*p = 5; } { A a; a.p = new int(0); // if this did compile, how would it be different from *a.p=5; ?? a.*p = 5; } return 0; } |
但这不会编译,因为未声明
任何人都可以提供在C语言中使用operator-> *和/或。*的真实示例吗?
这些运算符用于指向成员对象的指针。您不会经常遇到他们。例如,它们可用于指定对
基本语法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <iostream> struct A { int i; int geti() {return i;} A():i{3}{} }; int main() { { A a; int A::*ai_ptr = &A::i; //pointer to member data std::cout << a.*ai_ptr; //access through p-t-m } { A* a = new A{}; int (A::*ai_func)() = &A::geti; //pointer to member function std::cout << (a->*ai_func)(); //access through p-t-m-f } return 0; } |
用法示例:
1 2 3 4 5 6 7 8 9 10 11 12 | class A { public: int x; }; int main() { A obj; int A::* memberPointer = &A::b; //Pointer to b, which is int, which is member of A obj.*memberPointer = 42; //Set the value via an object A *objPtr = &obj; objPtr->*memberPointer = 21; //Set the value via an object pointer } |