дефолтные значения.
1. Как сделать такое?
void point(int x = 3, int y = 4);
point(1, 2); // calls point(1, 2)
point(1); // calls point(1, 4)
point(??, ??); // calls point(default x = 3, non-default y = 1337)
2. Зачем нужны приколы по типу void g(int, int = 7); ?
"Передай пж два инта, они нам нафиг не сдались, но все равно передай"?
1-е. нет. 2-е. в объявлении названия может и не нужны, нужны в реализации
так мы в реализации не можем обратиться что к первому инту без дефолтного значения, что ко второму с 7
Где? Нет никакой реализации - раздельная компиляция это костыли. В цпп имена опциональные, потому как тип важнее имени.
что здесь в первом написано - неведомо мне. Ты хочешь скипнуть первый аргумент? Выше уже ответили - нет. Это какая-то дыра в дизайне
.h void point(int, int) .cpp void point(int x, int y)
Написал пример, авось непонятно будет - https://godbolt.org/z/PMhKz66rT Там можешь ещё спросить у пацанов на тему стандарта - вроде как была какая-то история на эту тему. Мне без разницы, но авось тебе нет.
как по мне, это только частично решает проблему.
короче: в примитивных вариантах проще перечислить все параметры руками
Куда проще, кому проще? Никому не проще. Это уж не говоря о какой-то длинной/не очевидно инициализации. В любом случае именованные параметры нужны тогда, когда а) их много, б) есть, как уже было выше сказано, сложная инициализация. И множеству других назначений. Копипаста/перечисление решением не является. Единственный вариант на текущий момент получить поведение +/- близкое к именованным параметрам - это описанный выше паттерн. Он вполне себе адекватно работает. Ну и даёт, так же, некоторые преимуществу. То, что там нужно писать дополнительный агрегат? Это не особо проблема - оно +/- компенсирует друг друга. Скорее там больше проблемой можно назвать придумывание имён, потерю выразительности при перегрузки.
Лямбда функции
auto point(int x = 3) { return [=](int y = 4) -> void { // do something }
@BigRedEye как-то кидал такой пример https://godbolt.org/z/DP8Yxf
эх ещё бы определение foo выглядело попроще
Обсуждают сегодня