Разница между static_cast <primitive_type> (foo) и primitive_type (foo)

Возможный дубликат:
Регулярный листинг против static_cast и dynamic_cast
В С++ зачем использовать static_cast <int> (x) вместо (int) x?

В чем разница между static_cast<float>(foo) и float(foo)? Я часто вижу static_cast<float> или аналогичный код шаблона, чтобы перейти от любого интегрального типа к определенному типу интеграла. Например, я хочу, чтобы функция выполняла деление с плавающей запятой на любом интегральном типе. Обычно я вижу что-то вроде этого:

template <typename T>
float float_div(T lhs, T rhs)
{
    // I normally see this
    return static_cast<float>(lhs) / static_cast<float>(rhs);

    // But I could do this
    // return float(lhs) / float(rhs); // But I could do this
}

Есть ли какое-либо преимущество в использовании float(lhs) или static_cast<float>(lhs)? Также как называется инициализация/преобразование float(lhs)?