假设我有三个类: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/