Complex( double r, double i ) : re(r), im(i) {}
Эта конструкция называется Список инициализатора элемента в C ++.
Она инициализирует вашего члена re
значением r
, иэлемент im
для значения i
.
В чем разница между инициализацией и назначением внутри конструктора?&
В чем преимущество?
Существует разница между инициализацией элемента с использованием списка инициализатора и присвоением ему значения внутри тела конструктора.
Когда вы инициализируете поля через список инициализаторов, конструкторы будут вызываться один раз.
Если вы используете присваивание, то поля будут сначала инициализированы конструкторами по умолчанию, а затем переназначены (через оператор присваивания) фактическими значениями.присваивание в последнем, что может быть значительным для пользовательских классов.
Для двойного типа данных (для которого вы его используете) или членов класса POD практических затрат нет.