2014-02-06 2 views
-4

Когда мы должны использовать параметры по умолчанию? Каков правильный синтаксис и где они не должны использоваться? Регулярно ли они используют хорошую или плохую привычку? Они влияют на эффективность?Является ли использование параметров по умолчанию здоровой привычкой или плохой?

+0

См. Этот сайт. Очень четкое объяснение. http://www.learncpp.com/cpp-tutorial/77-default-parameters/ –

+0

Это нормально. Если вы не хотите использовать параметр по умолчанию. Вы должны переопределить функции. – billz

+0

@billz: перегрузка. –

ответ

1

Только случай, когда я могу думать о том, где он влияет на эффективность, будет, если вы включите что-то большое в качестве параметра по умолчанию, но оно не используется ни одним из вызывающих. Например:

#include <iostream> 
void foo(std::ostream& out=std::cout) { 
    out << "foo"; 
} 

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

0

Правильный синтаксис может быть найден в любой C++-ссылке, например. http://msdn.microsoft.com/en-us/library/91563f79.aspx. Они никогда не должны влиять на эффективность. Что касается подсказок использования, как и во всем остальном, это зависит от конкретного случая. Они могут сделать вещи очищенными или более сложными. Еще одна вещь, о которой стоит упомянуть - нужно быть осторожным с параметрами по умолчанию в виртуальных функциях, так как их значения разрешаются на основе статического типа, что может быть неожиданным.

+2

Не будем называть MSDN ссылкой на C++. –

0

Значение по умолчанию параметра указано только в декларации функции (член), например так:

void fun(int value = 0); 

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

void fun(int v1 = 0, int v2); 

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

void fun(int value) 
{ 
    cout << value << '\n'; // will print 0 when nothing was passed by the user 
} 

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

Иногда это может служить альтернативой перегрузке функции. Эффект приведенного выше примера может также быть достигнуто

void fun(); 
void fun(int value); 

Но это означает, что вы должны реализовать fun дважды (где fun() просто вызывает fun(0)).

Смежные вопросы