派生到指向成員的指標的基本轉換

可以使用 static_cast 將指向派生類成員的指標轉換為指向基類成員的指標。指向的型別必須匹配。

如果運算元是指向成員值的空指標,則結果也是指向成員值的空指標。

否則,只有當運算元指向的成員實際存在於目標類中,或者目標類是包含運算元指向的成員的類的基類或派生類時,轉換才有效。static_cast 不檢查有效性。如果轉換無效,則行為未定義。

struct A {};
struct B { int x; };
struct C : A, B { int y; double z; };
int B::*p1 = &B::x;
int C::*p2 = p1;                              // ok; implicit conversion
int B::*p3 = p2;                              // error
int B::*p4 = static_cast<int B::*>(p2);       // ok; p4 is equal to p1
int A::*p5 = static_cast<int A::*>(p2);       // undefined; p2 points to x, which is a member
                                              // of the unrelated class B
double C::*p6 = &C::z;
double A::*p7 = static_cast<double A::*>(p6); // ok, even though A doesn't contain z
int A::*p8 = static_cast<int A::*>(p6);       // error: types don't match