Q:

Are there differences between explicit type conversion "operators" in case of basic types?

Simple thing: I would like to "convert" e.g. a float into a double. Now there are three ways known to me:
float v = 4.2f;

double u = (double)v;
double u = double(v);
double u = static_cast<double>(v);
double u(v); Edit: Just thought about this as a fourth option!

Are these identical or are there any subtle differences? What do you suggest to use?
Note that this question is only related to basic types like int, char, float, ... not to pointers, PODs or classes.

A:

double u = (double)v; and double u = static_cast<double>(v); are equivalent  because for both cases a standard conversion is used. However double u = double(v); creates a temporary double object (which can be optimized away anyway) which is then used to initialize u. But since a temporaty is created anyway, using all three kinds of casts, then yeah, it's the same. 
From the three static_cast should be preferred. It's a couple of characters more typing, but in the long run it's better because first of all you explicitly specify the cast type and also since casting is generally suspicious, you do it in a very vivid manner

