170 похожих чатов

Еще такой вопрос : можно аргументам функции сразу обозначить их

дефолтные значения.

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); ?
"Передай пж два инта, они нам нафиг не сдались, но все равно передай"?

13 ответов

23 просмотра

1-е. нет. 2-е. в объявлении названия может и не нужны, нужны в реализации

Max-Azatian Автор вопроса
Макс Воробьев
1-е. нет. 2-е. в объявлении названия может и не ну...

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

Max Azatian
так мы в реализации не можем обратиться что к перв...

Где? Нет никакой реализации - раздельная компиляция это костыли. В цпп имена опциональные, потому как тип важнее имени.

что здесь в первом написано - неведомо мне. Ты хочешь скипнуть первый аргумент? Выше уже ответили - нет. Это какая-то дыра в дизайне

Написал пример, авось непонятно будет - https://godbolt.org/z/PMhKz66rT Там можешь ещё спросить у пацанов на тему стандарта - вроде как была какая-то история на эту тему. Мне без разницы, но авось тебе нет.

Roman R.
Написал пример, авось непонятно будет - https://go...

как по мне, это только частично решает проблему.

короче: в примитивных вариантах проще перечислить все параметры руками

Макс Воробьев
короче: в примитивных вариантах проще перечислить ...

Куда проще, кому проще? Никому не проще. Это уж не говоря о какой-то длинной/не очевидно инициализации. В любом случае именованные параметры нужны тогда, когда а) их много, б) есть, как уже было выше сказано, сложная инициализация. И множеству других назначений. Копипаста/перечисление решением не является. Единственный вариант на текущий момент получить поведение +/- близкое к именованным параметрам - это описанный выше паттерн. Он вполне себе адекватно работает. Ну и даёт, так же, некоторые преимуществу. То, что там нужно писать дополнительный агрегат? Это не особо проблема - оно +/- компенсирует друг друга. Скорее там больше проблемой можно назвать придумывание имён, потерю выразительности при перегрузки.

Лямбда функции

auto point(int x = 3) { return [=](int y = 4) -> void { // do something }

@BigRedEye как-то кидал такой пример https://godbolt.org/z/DP8Yxf

Till Schneider
@BigRedEye как-то кидал такой пример https://godbo...

эх ещё бы определение foo выглядело попроще

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта