【发布时间】:2015-10-28 12:54:31
【问题描述】:
假设我有三个类:A(母亲,抽象),B 和 C,A 的孩子。
所以 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 更容易搜索,但在这种情况下,隐式转换就足够了。
【问题讨论】:
标签: c++ casting coding-style upcasting