В чем разница между двумя формами инициализации, T obj = {…}
и T obj{…}
?
Сначала я думал, что T obj = {…}
— это сокращение от T obj = T{…}
, когда временный объект копируется в наш новый объект. Это, хотя и не выполняет конструктор копирования (copy elision), требует его существования и доступа к этому. Но когда я заблокировал доступ к конструктору копирования в этом конкретном классе, сделав конструктор закрытым, ошибки не было.
Это означает, что механизм копирования не задействован. Итак, какова функция символа '='?
Я сослался на следующий вопрос, но был недоволен отсутствием объяснения:
Является ли унифицированная инициализация C++11 заменой синтаксиса старого стиля?
EDIT: Аналогично, есть ли разница между int arr[]{…}
и int arr[] = {…}
? Я прошу об этом, чтобы посмотреть, смогу ли я выявить контраст между юниформ-инициализацией и инициализацией списка.
=
в инициализаторах часто вводит в заблуждение. По этой теме существует более одного вопроса; ваша книга также должна затрагивать эту тему. - person Asteroids With Wings   schedule 23.03.2020