gpt4 book ai didi

c++ - 使用reinterpret_cast下垂

转载 作者:行者123 更新时间:2023-12-01 15:05:13 25 4
gpt4 key购买 nike

我是一个乐于深入细节的人。这次,我创建了非常简单的功能,称为“场景”(在下面查找代码)。首先我会向你介绍
我的看法:

struct ScenarioContext
{ virtual ~ScenarioContext() = default; };

struct IScenarioStep
{
virtual ~IScenarioStep() = default;
virtual void run( ScenarioContext& ) = 0;
};

struct ScenarioContainer final
{
std::list<std::unique_ptr<IScenarioStep>> m_scenarioStepList;
};

struct Scenario
{
explicit Scenario( ScenarioContainer&&, std::unique_ptr<ScenarioContext>&& = nullptr );

void execute(); // Runs the steps one by one and passes context ref to steps

std::unique_ptr<ScenarioContext> m_context;
ScenarioContainer m_container;
};
现在示例“ScenarioStep”实现:
struct SimpleContext
: ScenarioContext
{
bool isFirstStepDone = false;
bool isSecondStepDone = false;
bool isThirdStepDone = false;
};

struct ScenarioStep
: IScenarioStep
{
void run(ScenarioContext& ctx) override
{
auto THE_ISSUE = dynamic_cast<SimpleContext&>(ctx);
}

};

在这里,我得出的结论是,用户/开发人员绝对不可能获得错误类型的上下文。在这里使用 reinterpret_cast是错误的吗?如果可以,为什么?绝对零成本在这里是如此诱人。
如果不是 reinterpret_cast,那么 static_cast呢?
我对我们可以使用的所有这些“不要”工具感到非常困惑。

最佳答案

reinterpret_cast绝对不能用于降低类层次结构,因为它不进行基本指针调整,这在多重继承的情况下会非常困难。
如果可以确定某种对象的真实对象类型与期望的对象类型匹配,则可以(并且应该使用)static_cast。当不需要基本指针调整时,static_cast仍然为0成本,并且在需要进行基本调整时将正常工作(尽管需要付出一定的代价)。

关于c++ - 使用reinterpret_cast下垂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63306518/

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