История изменений
Исправление alysnix, (текущая версия) :
И вообще код который вызывается не явно это не очень хорошо.
а мув семантика в инициализации это не скрытый код? а источник в таком присваивании вида {field1 = 10, field2 = x} это откуда берется? это надо иметь лишнюю зарезервированную область памяти, выставлять там поля в указанные значения(потому что тут не константа), а потом делать битовую копию в декларируемую переменную. тут скрытого кода даже больше, чем у с++ с прямым конструктором, что просто по адресу обьекта лупит значения полей.
то есть в чем разница - си++ конструктор работает с адресом нового обьекта, а в расте - обьект сначала конструируется в одном месте(судя по грамматическому правилу с присваиванием), а потом присваивается в целевой обьект. это и дольше и кода больше. с си++ так тоже можно делать, но это считается плохим стилем.
чтобы в расте сделать как в си++, видимо или придется вводить конструкторы или делать хак в компиляторе, что будет такие вот инициализации обьектов присваиванием генерить, как будто там inplace инициализации. но подобные хаки вопиют об изьяне в языке ващета
Исходная версия alysnix, :
И вообще код который вызывается не явно это не очень хорошо.
а мув семантика в инициализации это не скрытый код? а источник в таком присваивании вида {field1 = 10, field2 = x} это откуда берется? это надо иметь лишнюю зарезервированную область памяти, выставлять там поля в указанные значения(потому что тут не константа), а потом делать битовую копию в декларируемую переменную. тут скрытого кода даже больше, чем у с++ с прямым конструктором, что просто по адресу обьекта лупит значения полей.
то есть в чем разница - си++ конструктор работает с адресом нового обьекта, а в расте - обьект сначала конструируется в одном месте(судя по грамматическому правилу с присваиванием), а потом присваивается в целевой обьект. это и дольше и кода больше. с си++ так тоже можно делать, но это считается плохим стилем.
чтобы в расте сделать как в си++, видимо или придется вводить конструкторы или делать хак в компиляторе, что будет такие вот инициализации обьектов присваиванием генерить, как будто там inplace инициализации. но подобные хаки вопиют об изьяне в языке ащета