перегрузка функции против аргумента по умолчанию в переполнении стека

Привет у меня путаница или сказать больше, мне нужно кое-что понять. У меня есть процедура и другая перегруженная процедура такая же.

    string conct (string a, string b) {
string str = conct(a, b, "string");
return str;
}

string conct (string a, string b, const char* c) {
// do the processing;
return concatenated_string;
}

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

Но моя главная проблема заключается в третьем аргументе, который в настоящее время const char* c, Так что, если я сделаю что-то вроде const char* c = "string", будет ли правильный способ справиться со случаем устранения перегрузки с помощью одной функции с аргументом по умолчанию.

Я видел пост Вот но это, кажется, сосредоточено на компиляции, а не путанице, которую я имею.

2

Решение

Да, вы можете заменить перегруженные функции одной функцией и аргументом по умолчанию:

string conct (string a, string b, const char* c = "string") {
// do the processing;
return concatenated_string;
}
  • Когда вы перегружаете функции, компилятор генерирует код для каждой функции, что может привести к увеличению размера кода.
  • Если перегрузка действует как тонкая оболочка, как в вашем случае, оптимизатор может исключить дополнительную работу.
  • аргументы по умолчанию устанавливаются в месте расположения вызывающего, а не внутри функции, поэтому аргументы по умолчанию должны быть публично видимы, и для их изменения требуется перекомпиляция всех вызывающих. При такой перегрузке аргумент psuedo-default становится скрытой деталью.
3

Другие решения

Значения по умолчанию могут быть использованы в прототипах функций, но если мы хотим установить средний аргумент по умолчанию, тогда нам придется по умолчанию все значения справа от него …
С другой стороны, перегрузка функции может быть сделана для всех возможных комбинаций аргументов, также значение по умолчанию не нужно помещать в стек вызовов функций и, следовательно, меньше работы для компилятора …

0

По вопросам рекламы [email protected]