Стандартные аргументы и переменные функции

Есть ли способ указать параметр по умолчанию в функции с переменными параметрами (также относится к шаблонам)

4 ответа

Решение

В C++ вы можете заменить функцию variadic функцией, основанной на идиоме именованных параметров.

См. Пункт 10.20 часто задаваемых вопросов по C++. Что такое "идиома именованных параметров"?,

Это дает вам функциональность по умолчанию и удобную запись.

Ура & hth.,

Сначала ответ на C++.

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

Если в дополнение к этим аргументам по умолчанию вы хотите иметь возможность иметь va_arg список аргументов просто перегружает вашу функцию второй версией, которая делает именно это. Для этой "длинной" версии вы все равно должны предоставить все аргументы, поэтому не имеет смысла иметь здесь аргументы по умолчанию.

Теперь ответ С

Вероятно, вы не смотрели на такие вещи, но с va_arg Функциимакросов в C99 также позволяют определять аргументы по умолчанию для функций в C. Синтаксис макроса в этом случае является более разрешающим, чем для C++, так как вы можете опустить аргументы в середине вызова функции, а не только в конце. Так что, если бы вы объявили свою функцию что-то вроде

int toto(int a, ...)

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

toto(4,5,,,37);

Так что в этом смысле в C можно делать то, что вы просили. Я лично, конечно, не решился бы сделать это.

Зачем вам нужны переменные и параметры по умолчанию?

Например,

myFunc(int a=5, int b=5, int c=5);

может получить 0-3 параметров со значениями по умолчанию, и

myFunc(...)

может выявить любое количество параметров. Внутри функции вы можете проверить пропущенные параметры и заполнить значения по умолчанию.

Нет, нет способа сделать это.

Другие вопросы по тегам