В чем отличие этих двух способов приведения?
char c = 10;
int i = int(c);
float f = (float)c;
Оба способа осуществляют явное преобразование типов.
Первый способ называется функциональной нотацией (functional notation), потому что выглядит так же как вызов функции. Он может использоваться только для простых спецификаторов типа, и не будет работать (компилироваться) на составных, например, для unsigned char или long long int. В случае составного типа можно использовать typedef:
typedef long double ld;
ld(42); // ок
long double(42); // ошибка
Если инициализатор не задан (т.е. в скобках пусто), то выражение T() даст zero-initialized значение указанного типа.
Второй способ представляет собой преобразование в сишном стиле (cast notation), т.к. использовался в языке C и для совместимости оставлен в C++. Такое преобразование, т.е. (T)выражение, интерпретируется компилятором вполне определённой последовательностью действий из явных преобразований (см. ссылку). Такое преобразование требует явного наличия преобразуемого выражения. Т.е. нельзя написать просто (T) и получить инициализированное нулём значение, как в предыдущем случае.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости