Access to protected member through member-pointer: is it a hack?

前端 未结 4 957
抹茶落季
抹茶落季 2020-12-07 16:48

We all know members specified protected from a base class can only be accessed from a derived class own instance. This is a feature from the Standard, and this

4条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-07 17:10

    The fact that a member is not accessible using class member access expr.ref (aclass.amember) due to access control [class.access] does not make this member inaccessible using other expressions.

    The expression &Derived::value (whose type is int Base::*) is perfectly standard compliant, and it designates the member value of Base. Then the expression a_base.*p where p is a pointer to a member of Base and a_base an instance of Base is also standard compliant.

    So any standard compliant compiler shall make the expression other.*(&Derived::value); defined behavior: access the member value of other.

提交回复
热议问题