fer*_*n17 6 c++ casting coding-style upcasting
假设我有三个类: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);
Run Code Online (Sandbox Code Playgroud)
那么,就清晰度(代码风格)而言,在安全性方面,哪一个更好?我知道static_cast更容易搜索,但在这种情况下,隐式转换应该足够了.
你不必static_cast去基类,static_cast就是去另一个方向.所以这很好
myList.push_back(objB);
myList.push_back(objC);
Run Code Online (Sandbox Code Playgroud)
你必须static_cast要做的事情就是把一个东西投射A*到派生类上B*
B* some_obj = static_cast<B*>(myList.front());
Run Code Online (Sandbox Code Playgroud)