Size: a a a

Ассемблер

2021 July 06

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
источник

АШ

Алексей Шведов... in Ассемблер
Легче было бы, если бы был код, или бинарные файлы. Сам бы посмотрел, а так..
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
не, просто он спросил одно, а остался доволен ответом немного на другой вопрос
источник

АШ

Алексей Шведов... in Ассемблер
Ну может там разница будет заметна при изменении кода. Компилятор же в одном случае генерирует одинаковый код, а изменить/добавить одну строчку, и в итоге он меняет полностью весь алгоритм
источник

С

Сэр MSTR in Ассемблер
в том, что будет больше кода, возможно на уровне встроенных типов будет не так заметно из-за оптимизаторов, но на уровне пользовательских типов может быть огромная разница в зависимости от того как реализован пользовательский тип
источник

С

Сэр MSTR in Ассемблер
условно, при создании класса с тремя переменными

int
bool
float

будет выделена область памяти под объект, дальше для каждой переменной будет вызван конструктор (тут понятно, что конструкторы будут пустые и возможно даже не будут вызваны, если нет параметров для них, которые передают через список инициализации).. и вот только потом уже будет вызван конструктор класса, в котором выполняется операция присваивания для каждой переменной

а если это будут пользовательские типы какие нибудь и для них опеределен дефолтный конструктор, то после выделения памяти будут вызваны дефолтные конструкторы для этих переменных и только потом уже в конструкторе класса будет выполнено присваивание для каждой переменной

если же инициализировать члены класса через список инициализации, то вместо дефолтных конструкторов для данных типов будут вызваны конструкторы с параметрами и уже никаких операций присваивания не будет выполнено

как то так
отличие в том, что машинного кода будет больше, если выполнять присваивание переменным в конструкторе класса
источник

С

Сэр MSTR in Ассемблер
самое обидное, что я прям вчера читал в книжке о том, что каждая переменная создается с помощью конструктора в C++ и сегодня пытаясь ответить на этот вопрос забыл об этом =)
источник

С

Сэр MSTR in Ассемблер
возможно, вызов конструкторов для членов класса выполняется В теле конструктора нашего подопытного объекта, вот тут точно не знаю, но технических отличий в каком месте они будут вызваны особо никаких
источник

С

Сэр MSTR in Ассемблер
д ну в том то и дело, что команды для копирования данных одни и те же, а отличие крылось немного в другом
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
ага, в правильном понимании всего происходящего и как следствие в правильном вопросе
источник

С

Сэр MSTR in Ассемблер
Прошу прощения 🤷‍♂ не опытен =)
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
бывает
источник

d

disba1ancer in Ассемблер
с т.з. ассемблера разница не велика, но есть разные нюансы, в теле конструктора в принципе нельзя инициализировать, только присваивать значения переменным, соответственно для простых типов нет разнцы, а если у тебя поле типа класса с конструктором по умолчанию, он наверняка вызовется, если, конечно у компилятора не будет информации о том, что он без сайд эффектов
источник

АШ

Алексей Шведов... in Ассемблер
"в теле конструктора в принципе нельзя инициализировать, только присваивать значения переменным"
Это разве не одно и то же?
источник

d

disba1ancer in Ассемблер
что именно? присвоение и инициализация?
источник

АШ

Алексей Шведов... in Ассемблер
Инициализация класса это и есть присваивание значений переменным под, или без, условием
источник

d

disba1ancer in Ассемблер
имелась ввиду инициализация полей класса
источник

АШ

Алексей Шведов... in Ассемблер
Ну, я это тоже имею ввиду
источник

d

disba1ancer in Ассемблер
и инициализация не обязана вообще класть значения в переменные
источник

АШ

Алексей Шведов... in Ассемблер
Да, она может выполнить какое-то условие, и вывести что-то, или что-то вернуть
источник