Если необходимо, выполняется неявное преобразование
Оказывается, если в качестве параметра передается константное выражение (или просто константа), то компилятор1 поступает очень «мудро»: выражение вычисляется (на стадии компиляции), и один раз вызывается конструктор инициализации, который конструирует из полученного числового значения передаваемый в функцию объект типа ТМопеу. ПРИМЕЧАНИЕ
Если необходимо, выполняется неявное преобразование из типа int в тип long double.
Ситуация аналогична показанной ранее при использовании операции присваивания. Это очень важное наблюдение: вызов функции может сопровождаться вызовом конструкторов для преобразования типов параметров. Таким образом, вывод из этого следует совершенно определенный: передача параметров в функцию может сопровождаться существенными накладными расходами — вызываются конструкторы инициализации и (или) копирования.
При возврате объекта по значению тоже вызывается конструктор копирования. Именно это и предписано в стандарте (см. п. п. 12.8/1 в [1]): при передаче в функцию параметра по значению (и при возврате результата) конструктор копирования должен быть вызван для создания скрытой «внутренней» копии объекта. ВНИМАНИЕ
Запомните, что передача аргументов в функцию и возврат результата могут сопровождаться работой конструктора.
Конструкторы позволяют нам естественным образом задавать параметрам значения по умолчанию http://propiskin.ru/. В функции f 1 () в качестве начального значения могут быть заданы константы, например:
void fl(TMoney t = 100) { t.Di splayMoney(); }
Как видите, объявление параметра ничем не отличается от объявления инициализируемой переменной типа TMoney. При отсутствии конструкторов присвоение начальных значений вызывает некоторые трудности, так как присвоить можно только выражение типа TMoney http://propiskin.ru/. Естественно, вызов функций даже без параметра в обоих случаях сопровождается вызовом конструктора инициализации http://propiskin.ru/. Если же мы хотим инициализировать параметры переменными, то они, конечно, должны быть видны в точке объявления прототипа.
Опубликовал Kest
August 29 2013 12:39:00 ·
0 Комментариев ·
3178 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.