我有两节课:
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/