A static_cast is not safer than implicit conversion. However, you might have read that a static_cast is safer than a C cast. That's because it only allows "reasonable" casts. Some examples of a reasonable cast would be between numeric types, void * to some other pointer, base class ptr to derived class ptr. For example:
class Base {}; class D1 : public Base {}; class D11 {}; ... Base *ptr_to_Base(...); // Get from somewhere. D11 *p = (D11 *) ptr_to_Base; // No compiler error! I need new eyeglasses! D11 *p2 = static_cast<D11 *>(ptr_to_Base); // This gives you a compiler error.
Note that a static_cast can still allow bad casts, just not "unreasonable" ones:
class D2 : public Base {}; ... Base *b = new D2; D1 *p3 = static_cast<D1 *>(b); // Wrong, but allowed by compiler.
static_castwill issue a compilation error. The unsafety-ness is not visible in your example, but consider two different classesAandB(not related through inheritance or anything). Now, consider two pointersA* aandB* b. A standard cast such asb = (B*)awould go without a warning, althoughbwould be very unsafe to use. Astatic_castwill yield a compilation error, preventing you from running your program until you've fixed it.