title: Implicit conversion vs. static_cast when upcasting
body: <p>Let's say I have three classes: A (the mother, abstract), and B and C, the children of A.</p>
  
  <p>So B and C inherit from A (public inheritance).
  I have a list of pointers to A, which I populate with pointers of B or C.</p>
  
  <p>The question is: which is the preferred style when doing the casting/conversion?</p>
  
  <pre><code>class A {};
  class B : public A {};
  class C : public A {};
  
  B* objB = new B();
  C* objC = new C();
  
  std::list&lt;A*&gt; myList;
  // Option A: static cast conversion
  myList.push_back(static_cast&lt;A*&gt; (objB));
  myList.push_back(static_cast&lt;A*&gt; (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);
  </code></pre>
  
  <p>So, in terms of clarity (code style) and in terms of safety, which one is better? I understand that static_cast is easier to search for, but on this case, an implicit conversion should be enough.</p>