|
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 3
|
||||||
Заменить swap стандартной командой26.03.2023, 18:31. Показов 2831. Ответов 59
Метки нет (Все метки)
Нужно заменить swap стандартными командами
0
|
||||||
| 26.03.2023, 18:31 | |
|
Ответы с готовыми решениями:
59
Как перевести массив в шестнадцатеричную систему стандартной командой? Использование std::swap() вместо friend swap() при реализации Copy&Swap в современном С++ Заменить функцию со swap |
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|||||||
| 26.03.2023, 21:27 | |||||||
0
|
|||||||
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,325
|
|
| 26.03.2023, 21:37 | |
|
Verevkin, я даже пытаться не буду
Я так никогда не делаю и другим не советую. Это в ассемблере канает, а с C++ надо осторожно. Интуиция мне подсказывает - так нельзя
0
|
|
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
| 26.03.2023, 21:43 | |
|
0
|
|
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
||||||
| 26.03.2023, 21:48 | ||||||
|
Verevkin, я смоделировал такую ситуацию:
2
|
||||||
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,325
|
|
| 26.03.2023, 21:53 | |
|
Royal_X, он спать ушёл
0
|
|
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
||||||||||||
| 26.03.2023, 22:04 | ||||||||||||
Признаю, что неправ. Когда я писал на Си, у меня эта функция спёрта была откуда-то из классики. И в ней такая ситуация была учтена.
![]() Но это явно не UB, а очень даже предсказуемое поведение.
0
|
||||||||||||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 26.03.2023, 22:07 | |
|
Verevkin, сейчас вообще не компилируется
error: invalid operands of types 'void' and 'int*' to binary 'operator*' на 8 строке Как комментирую 7 строку с assert, ошибка пропадает
0
|
|
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|||||||
| 26.03.2023, 22:09 | |||||||
1
|
|||||||
|
Злостный нарушитель
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
|
|
| 26.03.2023, 22:10 | |
|
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 27.03.2023, 11:39 | ||
|
Что характерно, многие компиляторы знают этот прием, и насильно трансформируют машинный код в обычный обмен местами с использованием третьей переменной (регистра), чтобы повысить ILP-friendly кода. Исходя из этого, в современном мире писать так просто нет смысла.
4
|
||
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,325
|
|
| 27.03.2023, 11:45 | |
|
DrOffset, а UB здесь таки есть или нет?
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||
| 27.03.2023, 11:54 | |||||||
|
Если вот об этом варианте (и его модификациях):
(для знаковых, естественно).
1
|
|||||||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
||||||
| 27.03.2023, 11:55 | ||||||
|
DrOffset, а будет ли переполнение (соответственно и UB) в этом варианте?
int, никакого переполнения не случилось. Но может вы мне поможете найти случай, когда будет UB.
0
|
||||||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||
| 27.03.2023, 12:14 | |||
a.https://en.cppreference.com/w/... eval_order Компилятор должен (может) об этом предупреждать, кстати. Так что наверное далее этот вариант нет смысла рассматривать. Но ожидаемое поведение - это частный случай UB ![]() Unsigned integers не переполняются (для них действует арифметика по модулю), поэтому если нужны какие-то гарантии для варианта со сложением, то нужно использовать беззнаковые целые вместо знаковых.
0
|
|||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 27.03.2023, 12:16 | |
|
DrOffset, я если честно не совсем понял. По вашей ссылке "Order of evaluation" говорится о том, что компилятор может вычислять части выражения в произвольном порядке. Тем не менее, мне кажется, это не играет никакой здесь роли. Ну и пусть вычисляет эти части в произвольном порядке, главное, чтобы соблюдал "C++ Operator Precedence".
Я именно хотел увидеть от вас конкретный случай UB с предложенным мной вариантом. Ведь, это не то же самое, что и ваш вариант, хоть с виду и там и там сложение/ вычитание.
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||
| 27.03.2023, 12:24 | |||||
|
В качестве короткого ответа, по моей ссылке есть пример:
0
|
|||||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 27.03.2023, 12:32 | |
|
DrOffset, ладно, буду разбирать ваш ответ, чтобы понять.
Просто в https://en.cppreference.com/w/... precedence говорится, что у сложения и вычисления ассоциативность "Left-to-right". Учитывая это и то, что то, что в скобке, вычислится раньше, то думал, что вроде с порядком вычислений норм.
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||
| 27.03.2023, 12:44 | |||||
Royal_X, О, и даже далее по этой же ссылке там есть совсем уж прямое указание:
Хорошо, что теперь есть источники, где об этом пишут явно, а то раньше в таких ситуациях все время чувствую себя героем рассказа Шукшина. ---------------- ![]() Вижу вы не совсем понимаете что такое UB. Если ваш код работает как положено (как вы ждете), но при этом для этого случая в стандарте не предусмотрено гарантий такой работы, то это тоже считается за "увидеть конкретный случай UB". Потому что UB (undefined) - это отсутствие гарантий, а не какой-то конкретный спецэффект.
0
|
|||||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
||
| 27.03.2023, 12:45 | ||
короче, этот С++ получается не дает вообще никаких гарантий, что не читаешь в документации, потом оказывается, что где-то есть оговорка, что это может так не работать. Так а как изучать язык? Напоминает законы некоторых стран, в которых приводится на несколько страниц список прав гражданина, типа что он может требовать у государства, а дальше в последней строке прописано, что государство на свое усмотрение и без всякой мотивации может отказать гражданину в реализации этих правах.
0
|
||
|
фрилансер
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,325
|
|
| 27.03.2023, 12:52 | |
|
1
|
|
| 27.03.2023, 12:52 | |
|
Заменить функцию swap Чем можно заменить функцию swap?
Какой командой можна заменить msconfig ? Заменить отрицательные элементы линейного массива их модулями,не пользуясь стандартной функцией модуля Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|