Аргумент по умолчанию

В программировании, аргумент по умолчанию является аргументом функции, который при вызове необязательно указывать.В большинстве языков программирования, функции могут принимать один или несколько аргументов. Как правило, все аргументы должны быть указаны в полном объеме (как в языке программирования C[1]). Позже некоторые языки (например, C++) позволяли программисту в объявлении функции указывать значения некоторых аргументов. Таким образом функцию можно было вызывать передавая лишь обязательные аргументы.

Аргументы по умолчанию в C++

Рассмотрим следующее объявление функции:

 int my_func(int a, int b, int c=12);

Эта функция принимает три аргумента, последний из которых имеет значение по умолчанию 12. Программист может вызвать эту функцию двумя способами:

 result = my_func(1, 2, 3);
 result = my_func(1, 2);

В первом случае значение аргумента c определяется в вызове функции и равно трём. Во втором случае последний аргумент опущен и c примет значение двенадцать.

Аргументы по-умолчанию задаются начиная с последнего аргумента.

Значения аргументов по умолчанию для виртуальных методов не определяются во время исполнения по типу объекта, а берутся из типа указателя. В этом примере на экран консоли будет выведено 1 Derived:

class Base{public: virtual void foo(int x=1) {std::cout << x << " Base";}};class Derived : public Base{public: void foo(int x=2) override {std::cout << x << " Derived";}};int main () {Base* x = new Derived;x->foo(); // "1 Derived"return 0;}

Для функций-членов значения аргументов по умолчанию можно указывать в определениях. Вызвать такие функции с подставленными значениями по умолчанию можно только если их определение встречается раньше вызова. Пример :

struct C {    void g(int i, int j = 99);    C(int a);};C::C(int =5) { } void C::g(int i = 88, int j) { }

Перегруженные методы

Некоторые другие языки, такие как Java, не поддерживают аргументы по умолчанию. Однако такое поведение может быть воспроизведено с помощью перегрузки метода с тем же именем и меньшим числом аргументов:

int MyFunc(int a, int b) {    return MyFunc(a, b, 12);}int MyFunc(int a, int b, int c) {    /* основная реализация */}

Оценка

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

Если аргумент по умолчанию — это не просто литерал, а выражение, то это выражение может быть вычислено один раз для всей программы.

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

Например, аргументы по умолчанию в Python могут быть реализованы следующим образом:

 import datetime def f(a, b=None):     b = b or datetime.datetime.now()

Ссылки

🔥 Top keywords: Заглавная страницаЯндексДуров, Павел ВалерьевичСлужебная:ПоискYouTubeЛунин, Андрей АлексеевичПодносова, Ирина ЛеонидовнаВКонтактеФоллаут (телесериал)WildberriesTelegramРеал Мадрид (футбольный клуб)Богуславская, Зоя БорисовнаДуров, Валерий СемёновичРоссияXVideosСписок умерших в 2024 годуЧикатило, Андрей РомановичFallout (серия игр)Список игроков НХЛ, забросивших 500 и более шайбПопков, Михаил ВикторовичOzon17 апреляИльин, Иван АлександровичMail.ruСёгун (мини-сериал, 2024)Слово пацана. Кровь на асфальтеПутин, Владимир ВладимировичЛига чемпионов УЕФАГагарина, Елена ЮрьевнаБишимбаев, Куандык ВалихановичЛига чемпионов УЕФА 2023/2024Турнир претендентов по шахматам 2024Манчестер СитиMGM-140 ATACMSРоссийский миротворческий контингент в Нагорном КарабахеЗагоризонтный радиолокаторПинапВодительское удостоверение в Российской Федерации