|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
|
||||||
Свой класс string, нужна помощь с перегрузкой операторов15.01.2024, 17:03. Показов 6749. Ответов 99
Доброго времени суток.
Создал свой класс string. Цель создания своего класса строк - это скорость работы со строками и второе в образовательных целях. Если реализация получится удачной сделаю библиотеку для личного использования. Сейчас реализованы строки типа char потом добавлю wchar_t. new и delete решил не использовать, так как использую простой тип char. Вроде утечек памяти нет, а работать в теории должно быстрее. Прошу просмотреть код и дать рекомендации по оптимизации или указать на ошибки в коде, буду очень признателен. У меня возник вопрос с перегрузкой операторов, не понимаю как их сделать правильно, представленная реализация вроде работает правильно. Подскажите как правильно перегрузить [], +=, =, +. За ранее благодарю за ответы.
0
|
||||||
| 15.01.2024, 17:03 | |
|
Ответы с готовыми решениями:
99
Класс "Массив дробных чисел" с перегрузкой операторов Класс "Длинные числа" с перегрузкой операторов Создать класс "деньги" с перегрузкой операторов |
|
фрилансер
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,375
|
|
| 16.01.2024, 19:03 | |
|
0
|
|
|
27 / 24 / 4
Регистрация: 20.11.2023
Сообщений: 131
|
|||||||||||
| 16.01.2024, 19:21 | |||||||||||
|
[quote="Алексей1153;17183118"]да да, чтобы забыть про встраивание функций.[/quote
Доказательство того, что компилятору все равно
Ассемблер
0
|
|||||||||||
|
фрилансер
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,375
|
|
| 16.01.2024, 19:25 | |
|
1
|
|
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
|
| 16.01.2024, 19:28 | |
|
pechka_ne_sed, да ну тут же о другом речь... Если компилятору в месте вызова доступно определение (не важно инлайн или нет - тут в большинстве случаев ему действительно все равно), то у него появляется возможность встроить вызов. Если же определение не доступно, то такой возможности не будет (LTO и подобные технологиии пока не рассматриваем).
1
|
|
|
27 / 24 / 4
Регистрация: 20.11.2023
Сообщений: 131
|
|
| 16.01.2024, 19:42 | |
|
DrOffset, спасибо, что разъяснили
0
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||
| 16.01.2024, 19:44 | ||
|
Я просто не понимаю зачем вы отказываетесь от new / delete в пользу malloc/realloc/free?
0
|
||
|
Вездепух
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,347
|
||
| 16.01.2024, 19:54 | ||
-O3, бессмысленна для целей рассмотрения сгенерированного кода.https://godbolt.org/z/zr8qbvT5o Во-вторых, что можно тут вообще доказывать, если inline изначально был всего лишь "намек"? А сегодня это не более чем средство подавления ODR. Любые функции, тело который видно компилятору во время компиляции, являются встраиваемыми. Нет никакого смысла навешивать на них еще inline, если вам не нужно подавить ODR https://godbolt.org/z/748x6roTK
0
|
||
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
|
|
| 16.01.2024, 20:07 [ТС] | |
|
#pragma region Я использую в студии мне так удобно для форума уберу.
по поводу inline внутри класса методы действительно инлайнятся не явно. Но при указании inline/forceinline компилятор обратит внимание на просьбу и в зависимости от настроек компилятора и типа функции сам примет решение вставлять или нет. Ну а если по сути то для класса действительно это лишнее а актуально только для определения методов вне класса. Возможно уберу если не буду выносить определения во вне. По поводу комментариев мой препод (дай бог ему долгих лет) когда-то Требовал! все комментировать, просто привычка мне так удобно. explicit string() а хе его знает для конструктора без параметров наверно не нужно
0
|
|
|
фрилансер
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,375
|
|
| 16.01.2024, 20:15 | |
|
0
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||
| 16.01.2024, 20:17 | ||
|
Примеры как перегружать операторы нагугливаются запросто. Беда только в том (для меня), что постоянно меняется мода как именно эту перегрузку делать. Надо найти какую-то свежую, но авторитетную статью. А то опять смеяться начинают
0
|
||
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
|
|
| 16.01.2024, 20:27 [ТС] | |
|
я и так все не комментирую а то что мне нужно
Добавлено через 3 минуты Еще полезно будет == и < и [] так ни кто и не подсказал за все время. но зато я почерпнул много разных советов сейчас пока обдумываю как рефакторить свой класс.
0
|
|
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
||
| 16.01.2024, 20:30 | ||
|
Иначе "подсказка" превратится в переписывание вашего кода для нормальной организации необходимых перегрузок. Править наживую, прямо по вашему коду и ничего не переделывая, можно, но дело это неблагодарное (не стоит затраченных усилий).
1
|
||
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
|
|
| 16.01.2024, 20:32 [ТС] | |
|
0
|
|
|
фрилансер
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,375
|
||||||
| 16.01.2024, 20:34 | ||||||
|
Signum7, внутри класса string:
0
|
||||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||
| 16.01.2024, 20:36 | |||
|
Можно даже схитрить и добавить string - и тогда вообще все готовенькое на блюдечке будет ![]() Добавлено через 1 минуту Ну или книжку любую открыть по С++, там точно будет глава "перегрузка операторов", где все подробно написано. Не понятно какая подсказка нужна, потому и нет их.
0
|
|||
|
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
|
||||||
| 16.01.2024, 20:46 | ||||||
|
Листал предыдущие варианты и нашел это:
Добавлено через 5 минут const char * передавать.Но если уж хочется именно такой стратегии, то лучше и проще применить Copy&Swap Idiom, код станет гораздо приятнее с той же семантикой. Добавлено через 4 минуты 1) существует в двух вариантах - некостантном и константном 2) для классов подобным string он возвращает ссылку и константную ссылку на char type соответственно 3) в нем нет постоянных проверок выхода за диапазон (подразумевается, что ее сделали уровнем выше), для проверки диапазона в отладке может стоять assert
1
|
||||||
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
|
||||||||
| 16.01.2024, 21:00 [ТС] | ||||||||
|
а нужно
0
|
||||||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
| 16.01.2024, 21:02 | |
|
Для == можно длины сравнить сначала
1
|
|
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 141
|
||||||
| 16.01.2024, 21:28 [ТС] | ||||||
|
Сейчас буду переделывать класс.
Для начала переделал структуру строки
Для ускорения работы планирую выделять сразу память для строки размера size_string и в случае необходимости буду перевыделять память для более длинной строки.
0
|
||||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
| 16.01.2024, 21:32 | |
|
А зачем структура внутри класс? почему не сразу в классе нужные поля?
Просто любопытствую
0
|
|
| 16.01.2024, 21:32 | |
|
Написать класс "Дата" с перегрузкой операторов
Перегрузка операторов. Класс String Свой класс String Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|