The named casts have always been part of C++.
They're named because
* That makes the intent more clear.
* It's grep-able.
* It's more to write, which is a good thing for casts.
The two first notations, `double(x)` and `(double)x`, mean exactly the
same, but unlike the `static_cast` you don't know what that thing is
without inspecting `x`. It could be a `const_cast`, a `static_cast`, a
`reinterpret_cast` or a cast to inaccessible base, or a (restricted)
combination. When the code is maintained and `x` is changed, the unnamed
cast can drastically change meaning and introduce a bug.
Still, constructing a class type instance with one argument is
syntactically a cast of that argument, so one can't avoid the notation.
For that matter, constructing a class instance with any number of
arguments is syntactically a cast, but it gets absurd with 2 or more
arguments. I guess Stroustrup intended a kind of unification of
"conversion" expressions.
Cheers & hth.,
- Alf