派生到指向成員的指標的基本轉換
可以使用 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