I cant figure out why it would be a good idea. Please elaborate.
Mere laziness and DRY (don't repeat yourself). If I have a _sprintf that implements "give a string representation of" I find it sort of superfluous having to repeat the same code in a cast method too. But, as noted, for the (assumed existing) cases where objects not meant to be castable would silently be casted via _sprintf, it might be a horrible idea, losing the error-out-and-die feature.
Thought of that way, a non-existant _sprintf embracing and extending an existant cast method, is probably a lot better, safety-wise, than the other way around, as I thought it of first. In practice, though, I suspect that a lack of _sprintf but not cast, almost never happens.