пишет?
Может быть кто нибудь знает
чем будет отличаться на уровне машинного кода инициализация членов класса через список инициализации и через присваивание им значений в теле конструктора?
Мне говорили что есть разница, но что-то я не могу ее увидеть
Изменение значения области памяти в обоих случаях будет производиться через mov, в обоих случаях извлекаться из стека и в обоих случаях в памяти до этого будет находиться мусор,
Буду благодарен, если кинете в меня ссылкой где об этом можно почитать
так в чем разница то? ты сам только что сказал моменты, что это все одинаково
Всё же нет, в плюсах каждая переменная создается через конструктор и при создании объекта, после выделения области памяти для каждого члена класса отработает дефолтный конструктор, а уже после только через присваивание этим членам класса будет присвоено значение А через список инициализации.. будет вызван уже не дкфолтный конструктор для всех членов, а с параметром, соответствующим. Ну и операции присваивания уже не будет Я не учел, что каждая переменная через конструктор создается как и любой пользовательский тип
погодь, ты спршивал про разницу в машинном коде. и сказал (тезисы) про mov, стек, куча. так в чем то различие на уровне асма?
с т.з. ассемблера разница не велика, но есть разные нюансы, в теле конструктора в принципе нельзя инициализировать, только присваивать значения переменным, соответственно для простых типов нет разнцы, а если у тебя поле типа класса с конструктором по умолчанию, он наверняка вызовется, если, конечно у компилятора не будет информации о том, что он без сайд эффектов
Обсуждают сегодня