gpt4 book ai didi

c++ - 安全、检查转换为 C++ 基类,无需使用额外的行

转载 作者:太空狗 更新时间:2023-10-29 20:25:27 25 4
gpt4 key购买 nike

假设我有 B 类继承自 A 类,并考虑以下代码:

void f(B& b) {
A& a = b;
g(a);
}

有没有办法避免额外的 Actor 阵容?请注意,以下 static_cast 版本并不等效,因为除了向下转换之外,它还允许向上转换:

// Potentially dangerous: doesn't check that B inherits from A
void f(B& b) {
g(static_cast<A&>(b));
}

编辑:我不能像 Brian 的回答那样依赖隐含的强制转换来完全避免强制转换。今天的原因是 g 是模板,我想避免不必要的实例化,但过去还有其他原因。在任何情况下,我都需要某种显式转换来获取 A& 类型的值。

最佳答案

如果g有原型(prototype)

void g(A& a);

那么根本不需要转换;相反

g(b)

将简单地将 B 的左值隐式转换为 A 的左值,只要 B 确实派生自 A。如果 A 派生自 B,编译将失败(除非出于某些奇怪的原因您添加了从 B 的用户定义转换一个...)

编辑:如果您确实需要参数具有类型“A 的左值”并且希望避免强制转换为派生类,请考虑boost::implicit_cast .

关于c++ - 安全、检查转换为 C++ 基类,无需使用额外的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027339/

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