kzhereb / knu-is-ooop2019

Materials for "Fundamentals of OOP" course
MIT License
3 stars 0 forks source link

T10.20. В чому відмінність між синтаксисом MyClass(params) та MyClass{params}? #20

Open WAG13 opened 4 years ago

starquell commented 4 years ago

Перший вид ініціалізації - виклик констуктора який приймає аргументи params, другий - aggregate initialization. Типова помилка в використанні цих ініціалізаторів : std::vector(3, 1) ініціалізує вектор трьома елементами 1 типу int. std::vector{3, 1} ініціалізує вектор елементами 3 і 1.

AntonHladkiy commented 4 years ago

MyClass(params) - виклик конструктора класу MyClass, MyClass{params} те саме що MyClass A=params;

RostyslavMV commented 4 years ago

MyClass(params) - виклик конструкто класу MyClass з параметрами таких, типів як у змінних params MyClass{params} - aggregate initialization, часто використовуєтсья для примітивного заповнення. Воно також присутнє для масивів: int arr[] = { 1 , 2 };

i1red commented 4 years ago

Другий тип - uniform/aggregate initialization. Зазвичай відрізняються для контейнерів, у яких заданий конструктор з std::initializer_list(тоді контейнер заповнюється елементами списку)

ilyakorenevskyi commented 4 years ago

Перший варіант - виклик конструктору Другий називається aggregate initialization, використовується для заповнення параметрами, використовується наприклад у векторах, або парах