В чем заключается разница в использовании тип_данных(выражение) и (тип_данных)выражение?
Единственная разница между тип(выражение) и (тип)выражение в том, что первом случае имя типа должно быть одним словом, иначе произойдет ошибка компиляции.
Если оба варианта компилируются, то они полностью эквивалентны.
Пример:
auto a = int(1); // ✓
auto b = int*(1); // ошибка
auto c = const int(1); // ошибка
auto d = long int(1); // ошибка
auto e = (int)1; // ✓
auto f = (int*)1; // ✓
auto g = (const int)1; // ✓
auto h = (long int)1; // ✓
Есть еще (тип)(выражение) - это по сути (тип)выражение, но со скобками, добавленными к выражению. Между этими двумя вариантами разницы нет совсем (не считая случаев, когда скобки влияют на приоритет операций).
В чем заключается разница в использовании int(выражение) и (int)выражение?
Так как int - это одно слово, для него разницы нет.
P.S. тип(выражение) не работает в С.
(double)100 - это преобразование типа (cast conversion) в стандарте C. Плюсы такой способ поддерживает.
double(100) - стиль плюсов, это вызывает конструктор с преобразованием. Делает то-же самое, называется по разному.
double{100} - в С++11 всё то-же, но следит чтобы не было уменьшения точности.
Конструкция вида (тип) выражение называется C-style cast (cast notation) и служит для преобразования типов в языке С.
Конструкция вида тип(выражение) называется functional cast (functional notation) и было добавлено в С++. Такой синтаксис был полезен в ситуациях, когда получаемый объект не представлял собой значение в него переданное, например connection("url_string") (чего не могло быть в С). Существенным моментом является то, что
тип не может быть составным, т.е. запись long int(1) невалиднавыражение является опциональным, в таком случае выполняется direct-initializationРазницы в использовании этих конструкций в С++ больше нет, так как для всех сценариев их использования появились альтернативные средства, позволяющие строже соблюдать типобезопасноть, избегать потери данных и точнее выражать намерения. Для преобразования типов служат static_cast, reinterpret_cast, const_cast, и разные специальные функции, такие как ::std::as_const. Для инициализации следует использовать синтаксис list initialization либо встроенные и пользовательские литералы.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости