Ответ 1
Первый - это copy- -инициализация списка, для построения возвращаемого значения будет выбран конструктор approriate (т.е. Object::Object(int)
).
Второй построит временный Object
помощью инициализации direct-list-инициализацией (который также вызывает Object::Object(int)
), а затем скопирует его в возвращаемое значение. Из-за копирования elision (что гарантировано от С++ 17) конструкция copy- или move- здесь опущена.
Так что для вашего примера они имеют тот же эффект; Object::Object(int)
используется для построения возвращаемого значения. Обратите внимание, что для 1-го случая, если конструктор explicit
он не будет использоваться.
direct-list-initialization (рассматриваются как явные, так и неявные конструкторы)
copy- list-initialization (рассматриваются как явные, так и неявные конструкторы, но можно назвать только неявные конструкторы)