0 / 0 / 0
Регистрация: 13.12.2019
Сообщений: 47

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

21.10.2022, 12:13. Показов 4498. Ответов 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,312
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,312
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,312
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru