gpt4 book ai didi

c++ - 用这个技巧从外部访问 protected 成员,但这有效吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:33 28 4
gpt4 key购买 nike

如果我有以下类(class):

class Foo
{
protected:
int i;
public:
Foo() : i(42) {}
};

当然,我无法从外部访问 protected 成员,但我可以做这个小技巧:首先我创建一个继承 Foo 的新类:

class Foo2 : public Foo
{
public:
int GetI() { return i; }
};

现在,只要我有一个 Foo 的实例或指向此类实例的指针,我就可以通过强制转换访问 protected 成员(因为我不使用任何其他成员):

Foo *f = new Foo();
Foo f2;
std::cout << ((Foo2*)f)->GetI() << std::endl;
std::cout << (reinterpret_cast<Foo2&>(f2)).GetI() << std::endl;

我明白为什么会这样,但会不会有任何不良后果?编译器不介意,没有任何运行时检查。

最佳答案

reinterpret_cast<Foo2&>(f2)).GetI()

从技术上讲,这是未定义的行为。所以它可能有效,但并非必须如此。

关于c++ - 用这个技巧从外部访问 protected 成员,但这有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15450602/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com