0
class Base { int type; };
class Derived1 : public Base { ... };
class Derived2 : public Base { ... };
class Container
{
public:
Derived1 f1;
Derived2 f2;
};
Container c;
size_t offset = (size_t) static_cast<Base*>(&reinterpret_cast<Container*>(0)->f2);
Base* base = reinterpret_cast<Base*>((size_t) c + offset); // ok
Base Container::* ptr = &Container::f2; // compile error!
base = c.*ptr;
是否使用指針指向成員來獲取指向Base的指針的任何有效方法?C++指向成員的指針(指向成員的基類)
您提領一個'nullptr',因此代碼未定義的行爲。也許['offsetof'](http://en.cppreference.com/w/cpp/types/offsetof)是你想要的。 – nwp
'reinterpret_cast(0)'正式爲UB。除非執行保證它沒問題,否則不應該使用它。這就是'offsetof'的作用。 – StoryTeller
這段代碼很混亂。即使你說工作的部分實際上也沒有編譯。 'Base Container :: * ptr'是一個無意義的類型名稱,不可能找出你的真正含義。在你提到編譯器錯誤的代碼中,你試圖找出甚至沒有地址的地址。 – Omnifarious