gpt4 book ai didi

c++ - 向上转换时的隐式转换与 static_cast

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:15 25 4
gpt4 key购买 nike

假设我有三个类:A(母亲,抽象),B 和 C,A 的 child 。

所以B和C继承自A(公有继承)。我有一个指向 A 的指针列表,我用 B 或 C 的指针填充它。

问题是:在进行转换/转换时,哪种风格是首选?

class A {};
class B : public A {};
class C : public A {};

B* objB = new B();
C* objC = new C();

std::list<A*> myList;
// Option A: static cast conversion
myList.push_back(static_cast<A*> (objB));
myList.push_back(static_cast<A*> (objC));

// Option B: implicit conversion
myList.push_back(objB);
myList.push_back(objC);

// Option C: C-style conversion (I understand that this is evil and must be avoided)
myList.push_back((A*) objB);
myList.push_back((A*) objC);

那么,就清晰度(代码风格)和安全性而言,哪个更好呢?我知道 static_cast 更容易搜索,但在这种情况下,隐式转换就足够了。

最佳答案

你不必static_cast到基类,static_cast是去另一个方向。所以这很好

myList.push_back(objB);
myList.push_back(objC);

您必须static_cast 的时间是将A* 转换为派生类B*

B* some_obj = static_cast<B*>(myList.front());

关于c++ - 向上转换时的隐式转换与 static_cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391629/

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