Когда мы должны использовать параметры по умолчанию? Каков правильный синтаксис и где они не должны использоваться? Регулярно ли они используют хорошую или плохую привычку? Они влияют на эффективность?Является ли использование параметров по умолчанию здоровой привычкой или плохой?
ответ
Только случай, когда я могу думать о том, где он влияет на эффективность, будет, если вы включите что-то большое в качестве параметра по умолчанию, но оно не используется ни одним из вызывающих. Например:
#include <iostream>
void foo(std::ostream& out=std::cout) {
out << "foo";
}
Если ни один из звонивших не использовать параметр по умолчанию, а остальные программы не нужны <iostream>
то он будет включен в напрасными, увеличивая размер исполняемого файла (и время компиляции, которая может или может не иметь большого значения).
Правильный синтаксис может быть найден в любой C++-ссылке, например. http://msdn.microsoft.com/en-us/library/91563f79.aspx. Они никогда не должны влиять на эффективность. Что касается подсказок использования, как и во всем остальном, это зависит от конкретного случая. Они могут сделать вещи очищенными или более сложными. Еще одна вещь, о которой стоит упомянуть - нужно быть осторожным с параметрами по умолчанию в виртуальных функциях, так как их значения разрешаются на основе статического типа, что может быть неожиданным.
Не будем называть MSDN ссылкой на C++. –
Значение по умолчанию параметра указано только в декларации функции (член), например так:
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)
).
- 1. Является ли пустой флаг плохой привычкой?
- 2. Является ли это плохой привычкой чрезмерно полагаться на препроцессоры?
- 3. Является ли память Spiky «здоровой» для приложения?
- 4. Является ли плохой практикой использование созависимых классов?
- 5. Является ли это плохой привычкой изучать один новый язык программирования, зависит от существующего знакомого языка?
- 6. Почему использование «conio.h» не является хорошей привычкой программировать?
- 7. Является ли круговая зависимость хорошей или плохой
- 8. Использование параметров функции по умолчанию для родных
- 9. Использование numeric_limits для значений параметров по умолчанию
- 10. Является ли это считается плохой практикой для изменения параметров
- 11. Является ли printf() плохой?
- 12. Является ли designMode плохой?
- 13. Является ли хорошей привычкой печатать значение bool из функции?
- 14. Является ли хорошей привычкой всегда инициализировать объекты с помощью {}?
- 15. Является ли это плохой практикой?
- 16. Является ли упаковка кода в закрытии хорошей привычкой?
- 17. Является ли проверка JavaScript плохой?
- 18. Является ли ActiveRecord плохой практикой?
- 19. Является ли самонастраивающаяся функция плохой?
- 20. Может ли добавление параметров по умолчанию в библиотечную функцию прерывать импорт или использование?
- 21. Использование параметров шаблона по умолчанию для ввода производного типа
- 22. Является ли это плохой связью?
- 23. Является ли CORS плохой практикой?
- 24. Является ли использование меток в Perl-подпрограммах считающейся плохой практикой?
- 25. Является ли метод C# закрытым или виртуальным по умолчанию?
- 26. Является ли конструктор/назначение по умолчанию недопустимым noexcept или constexpr?
- 27. Является ли цвет фона по умолчанию белым или прозрачным?
- 28. Является ли тип целочисленной константы по умолчанию подписанным или неподписанным?
- 29. Является ли Java однопоточным или многопоточным по умолчанию?
- 30. Является ли строка stdout буферной, небуферизованной или неопределенной по умолчанию?
См. Этот сайт. Очень четкое объяснение. http://www.learncpp.com/cpp-tutorial/77-default-parameters/ –
Это нормально. Если вы не хотите использовать параметр по умолчанию. Вы должны переопределить функции. – billz
@billz: перегрузка. –