我有两节课:

class base
{
protected:
   int x;
};

class der: public base
{
   void Acc(base& b)
   {
      b.*(&der::x) = 5;
   }
};

以这种方式(&der::x)访问 protected 基本成员安全吗?
我担心它可能指向错误的变量。

通过访问基类对象的 protected 成员可以通过这种方式。

上面的代码:

最佳答案

对于那些可能难以理解以下内容的人

b.*(&der::x) = 5;

它可以写成:
b.*(&(der::x)) = 5;

由于范围解析运算符可以省略,因为在基类和派生类中只有一个名为x的变量。
b.*(&x) = 5;

只是获取x的地址,然后再次取消引用它。它可以写成:
b.x = 5;

我希望您可能知道。但是,如果您使用b.x而不是'b。*(&der::x)= 5;',则您的代码将无法编译。因为'x'是 protected ,它用于绕过编译器规则,该规则阻止我们编写b.x = 5;

关于c++ - 以这种方式访问​​受基础保护的成员安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18117458/

10-10 16:31