C-style casts are still valid for C++ (although Bjarne Stroustrup has expressed wishes that they be disallowed).
The style that you've listed here -- T(x) rather than (T)x -- is technically a construction rather than a cast. If T is a class type, you'll be calling a constructor, and (T)x will be invalid. If T is a primitive, it will be equivalent to a cast.
As you've noticed, you can't use this "constructor" style with all types -- anything that's multiple words, in fact, so unsigned int and float* and const Foo are all out. One possibility is to bracket the type to make the expression unambiguous -- (unsigned int)(x), for example. Depending on your perspective, that may look too much like a C-style cast for your liking.
C++ introduces a number of keywords for casts. The keywords are dynamic_cast, static_cast, reinterpret_cast and const_cast. The syntax for all of them is the same, for example (int)x is equivalent to static_cast<int>(x).
dynamic_cast is used to safely cast from a pointer-to-superclass to a pointer-to-subclass. If the particular instance you're doing it to is not an instance of the subclass, an exception will be thrown.
static_cast is basically equivalent to the same C-style cast; you use it to convert between different types of numbers. It doesn't work with pointers, though.
reinterpret_cast treats the bit pattern of the source as if it were of the destination type. The only thing I've seen this used for is to convert between pointer types: int* foo = new int(); unsigned int* bar = reinterpret_cast<unsigned int*>(foo);. Basically, if you're using this you're probably doing something wrong.
const_cast is used to remove const from a type. For example: const int* foo = &x; *const_cast<int*>(foo) = 3; will work. If you're using this you're definitely doing something wrong