I learned that in C++,
typedef foo* mytype;
(mytype) a // C-style cast
and
mytype(a) // function-style cast
Conversion is a form of initialization. When a type is implicitly convertible to another, a functional cast is a form of direct initialization. The compiler knows which types are convertible.
Whenever something is converted to a class type, either a converting constructor of the target type or a conversion operator of the source type is used. In your examples, both casts call the default constructor.