В C ++ этот тип выражения является формой приведения, по крайней мере, синтаксически. То есть вы используете функциональный синтаксис C ++ Widget(15)
для создания временного объекта типа Widget
.
Даже когда вы создаете временный объект с использованием конструктора с несколькими аргументами (как в Widget(1, 2, 3)
), он все еще считается вариантом функционального приведения нотации (см. 5.2.3)
Другими словами, ваш вопрос «Является ли это составом или конструкцией» задан неправильно, поскольку он подразумевает взаимную исключительность между приведениями и «конструкциями». Они не являются взаимоисключающими. Фактически, каждое преобразование типа (будь то явное приведение или что-то более неявное) - это не что иное, как создание («конструирование») нового временного объекта целевого типа (исключая, может быть, некоторые ссылочные инициализации).
Кстати, функциональная нотация приведена в основном в C ++. Язык C не имеет функциональных стилей.