我见过的关于成员指针的大多数讨论都集中在成员所属类型允许的转换上.我的问题是关于成员类型的转换.
struct Base{};
struct Derived : public Base{};
struct Foo{ Derived m_Derived; };
Run Code Online (Sandbox Code Playgroud)
鉴于这些声明,以下代码会产生错误(MSVC 2008):
// error C2440: 'initializing' : cannot convert from 'Derived Foo::* ' to 'Base Foo::* '
Base Foo::*p = &Foo::m_Derived;
Run Code Online (Sandbox Code Playgroud)
从Derived*到Base*的转换通常是允许的 - 为什么差异在这里?
c++ ×1