Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 13.12.2019
Сообщений: 47

Почему этот код не выполнится должным образом?

21.10.2022, 12:13. Показов 4462. Ответов 51

Студворк — интернет-сервис помощи студентам
На одном форуме наткнулся на то, что одному парню на собеседовании задали написать функцию нахождения минимума, он написал следующим образом:

C++
1
2
3
4
5
template <class T> 
T& min (T& a, T& b) 
{
  return (a<b)?a:b;
}
собеседующий ответил, что такой код не отработает должным образом на вызове:
min(a, b+1)

у меня вопрос, почему не работает? я запустил и он работает. (параметры стоило бы сделать константными, да, но почему код не отработает должным образом?)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.10.2022, 12:13
Ответы с готовыми решениями:

Почему не работает должным образом?
vremyagoda = input (&quot;Введите какое сейчас время года? Зима?, Осень? Лето?, а может быть Весна?: &quot;) vremyasutok = input (&quot;Что у...

Не понимаю почему программа не работает должным образом
все работает исправно кроме условного оператора if,когда переменные меняются местами ничего не происходить код: a = float(input()) ...

Почему текст в колонках DataTables не форматируется должным образом?
При инициации таблицы задал классы колонок {className:&quot;Price&quot;,&quot;width&quot;: &quot;70px&quot; ,targets:, render:$.fn.dataTable.render.number( ' ',...

51
0 / 0 / 0
Регистрация: 13.12.2019
Сообщений: 47
03.11.2022, 18:33  [ТС]
Студворк — интернет-сервис помощи студентам
Folian
т.е. если засунуть два lvalue - можно и ссылку брать
1. По идее можно передать в качестве аргумента один lvalue и один rvalue, и если функция min вернет lvalue, то можно его по ссылке принять и все будет хорошо.

2. Но вот что меня еще смущает, при таком коде:

C++
1
2
3
4
5
6
7
8
9
10
template <class T>
 const T& min(const T& a, const T& b)
{
    std::cout << "MyMin" << std::endl;
    return (a < b) ? a : b;
}
 
int var1 = 5;
int var2 = 6;
min(var1,var2);
мы получить значения можем с помощью копирования значения(инициализация копированием) и можем получить в константные ссылки, а вернуть его в неконстантную ссылку не можем, что же делать?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
03.11.2022, 18:58
NewFive,
Все в посте 41 это один большой -
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
03.11.2022, 19:02
Цитата Сообщение от NewFive Посмотреть сообщение
один lvalue и один rvalue, и если функция min вернет lvalue
Зачем тогда вообще спрашивать, если уже знаешь что вернёт?
Цитата Сообщение от NewFive Посмотреть сообщение
что же делать?
Непосредственно в тернарник засунуть, например. Или перегрузить неконстантными. Или через rvalue-ref~. Или ещё как.
Смотря чо надо. А чо надо-то?
0
0 / 0 / 0
Регистрация: 13.12.2019
Сообщений: 47
03.11.2022, 19:10  [ТС]
Цитата Сообщение от Folian Посмотреть сообщение
Зачем тогда вообще спрашивать, если уже знаешь что вернёт?
чтобы убедиться, что правильно понял

Цитата Сообщение от Folian Посмотреть сообщение
Непосредственно в тернарник засунуть, например. Или перегрузить неконстантными. Или через rvalue-ref~. Или ещё как.
Смотря чо надо. А чо надо-то?
понял, я так и думал, но просто хотел убедиться, но вот насчет тернарника не понял, можно пояснить?

Добавлено через 16 секунд
Цитата Сообщение от SmallEvil Посмотреть сообщение
Все в посте 41 это один большой -
а, понял, буду юзать кнопки языков программирования при использовании кода
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
03.11.2022, 19:17
Цитата Сообщение от NewFive Посмотреть сообщение
чтобы убедиться, что правильно понял
Нипральна понял; "зачем сувать в функцыю lvalue и rvalue, если уже знаешь что выдаст lvalue?"
Цитата Сообщение от NewFive Посмотреть сообщение
насчет тернарника не понял
C++
1
auto& x { (a > b ? b : a) };
0
0 / 0 / 0
Регистрация: 13.12.2019
Сообщений: 47
03.11.2022, 19:31  [ТС]
Цитата Сообщение от Folian Посмотреть сообщение
Нипральна понял; "зачем сувать в функцыю lvalue и rvalue, если уже знаешь что выдаст lvalue?"
ну я имел в виду, что если в теории мы засунем lvalue и rvalue и он вернет lvalue, а мы будем принимать по ссылке, то всё будет ок, но если он вернет rvalue, то наша ссылка будет висячей, а так да, если мы знаем, что вернет, то нет смысла вызывать функцию.

всё, разобрался, спасибо. Я вот сейчас изучаю эту тему и хочу понять, нужно ли понимать xgvalue, prvalue и т.д.? или достаточно понимать lvalue и rvalue ? ну и lvalue и rvalue ссылки.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
03.11.2022, 22:02
[/CPP]
Цитата Сообщение от NewFive Посмотреть сообщение
что если в теории мы засунем lvalue и rvalue
Вы пробовали ?

Добавлено через 1 минуту
Цитата Сообщение от NewFive Посмотреть сообщение
нужно ли понимать xgvalue, prvalue и т.д.? или достаточно понимать lvalue и rvalue ? ну и lvalue и rvalue ссылки.
на первых порах нужно четко отличать lvalue и rvalue.

Остальное - нюансы.

Добавлено через 1 минуту
А еще нужно понимать выведение типов и шаблоны, которые вы cейчас плутаете с lvalue b rvalue объектами
Разбирайте все как можно более обособлено, если это возможно, а это возможно

Добавлено через 4 минуты
Folian, я проверял, стандартный max может принимать b lvalue b rvalue если принимать результат как константную ccskre
Что очень круто, то есть выжали по максимуму из ситуации.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
04.11.2022, 01:03
Стандартная функция std::min в случае эквивалентных аргументов всегда возвращают свой первый аргумент. Причем под это в свое время, кажется, была подведена какая-то теоретическая база, что-то из области "стабильности упорядочения" и т.п. То есть канонической реализацией min(a, b) в C++ является именно

C++
1
return b < a ? b : a;
Именно в таком порядке для обеспечения возврата a в случае эквивалентности. И на основе использования только фундаментального оператора сравнения - <.

Выглядит логично, но чего я навскидку не вспомню, так этого того, почему в соответствие с этой же самой логикой от std::max не потребовали возвращения своего второго аргумента в случае эквивалентных a и b. std::max в такой ситуации тоже возвращает первый. То есть с точки зрения lvalue поведения пара std::min и std::max ведет себя неэквивалентно стандартной функции std::minmax. std::minmax гарантирует возврат пары [a, b] в случае эквивалентности, не [a, a].

---

Также, предложение "полноценной" реализации std::min и std::max, с максимальным сохранением lvalue-поведения, с поддержкой rvalue-форвардинга, но и с возможностью смешения типов

https://www.open-std.org/jtc1/... n2199.html
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
04.11.2022, 10:17
TheCalligrapher, то есть min и max можно рассматривать как часть нестабильной сортировки ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
04.11.2022, 12:28
Цитата Сообщение от SmallEvil Посмотреть сообщение
то есть min и max можно рассматривать как часть нестабильной сортировки ?
Я не вижу, как min и max можно рассматривать как часть любой сортировки. В том смысле, что в общем случае для массива из двух элементов

C++
1
2
dst_array[0] = std::min(src_array[0], src_array[1]);
dst_array[1] = std::max(src_array[0], src_array[1]);
не дадут на выходе отсортированный массив.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
04.11.2022, 12:45
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
не дадут на выходе отсортированный массив.
Это я про другое, но все верно, глупый был вопрос )
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
04.11.2022, 12:49
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
не дадут на выходе отсортированный массив
То есть можно конечно сделать так

C++
1
2
dst_array[0] = std::min(src_array[0], src_array[1]);
dst_array[1] = std::max(src_array[1], src_array[0]);
и все получится...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2022, 12:49

Код выводится в браузер, а не обрабатывается должным образом.
Здравствуйте!Проблема такая: при загрузке этого кода браузер выводит этот код, а должен график синуса Что может быть не так?? &lt;?php ...

Не получается должным образом получить HTML код сайта программным способом
Здравствуйте! Недавно решил сделать прогу на C#, а чтобы она нормально работала нужно считывать инф-цию с сайта. Информация считывается, но...

Как изменить код программы чтобы все условия выполнялись должным образом?
Здравствуйте! Вот код программы: #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;math.h&gt; using namespace std; int t; ...

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

Не работает должным образом LZ-78 (компрессор) c++
Приветствую, форумчане! Прошу помочь с небольшим проектом. Есть код на C++, но не могу реализовать работу с файлами. Только прошу, не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
52
Ответ Создать тему
Новые блоги и статьи
Сезонность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru