|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 136
|
||||||
Свой класс string, нужна помощь с перегрузкой операторов15.01.2024, 17:03. Показов 6212. Ответов 99
Доброго времени суток.
Создал свой класс string. Цель создания своего класса строк - это скорость работы со строками и второе в образовательных целях. Если реализация получится удачной сделаю библиотеку для личного использования. Сейчас реализованы строки типа char потом добавлю wchar_t. new и delete решил не использовать, так как использую простой тип char. Вроде утечек памяти нет, а работать в теории должно быстрее. Прошу просмотреть код и дать рекомендации по оптимизации или указать на ошибки в коде, буду очень признателен. У меня возник вопрос с перегрузкой операторов, не понимаю как их сделать правильно, представленная реализация вроде работает правильно. Подскажите как правильно перегрузить [], +=, =, +. За ранее благодарю за ответы.
0
|
||||||
| 15.01.2024, 17:03 | |
|
Ответы с готовыми решениями:
99
Класс "Массив дробных чисел" с перегрузкой операторов Класс "Длинные числа" с перегрузкой операторов Создать класс "деньги" с перегрузкой операторов |
|
фрилансер
6472 / 5690 / 1131
Регистрация: 11.10.2019
Сообщений: 15,168
|
|
| 16.01.2024, 19:03 | |
|
0
|
|
|
27 / 24 / 4
Регистрация: 20.11.2023
Сообщений: 131
|
|||||||||||
| 16.01.2024, 19:21 | |||||||||||
|
[quote="Алексей1153;17183118"]да да, чтобы забыть про встраивание функций.[/quote
Доказательство того, что компилятору все равно
Ассемблер
0
|
|||||||||||
|
фрилансер
6472 / 5690 / 1131
Регистрация: 11.10.2019
Сообщений: 15,168
|
|
| 16.01.2024, 19:25 | |
|
1
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|
| 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
|
||
|
Вездепух
13202 / 6837 / 1822
Регистрация: 18.10.2014
Сообщений: 17,294
|
||
| 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
Сообщений: 136
|
|
| 16.01.2024, 20:07 [ТС] | |
|
#pragma region Я использую в студии мне так удобно для форума уберу.
по поводу inline внутри класса методы действительно инлайнятся не явно. Но при указании inline/forceinline компилятор обратит внимание на просьбу и в зависимости от настроек компилятора и типа функции сам примет решение вставлять или нет. Ну а если по сути то для класса действительно это лишнее а актуально только для определения методов вне класса. Возможно уберу если не буду выносить определения во вне. По поводу комментариев мой препод (дай бог ему долгих лет) когда-то Требовал! все комментировать, просто привычка мне так удобно. explicit string() а хе его знает для конструктора без параметров наверно не нужно
0
|
|
|
фрилансер
6472 / 5690 / 1131
Регистрация: 11.10.2019
Сообщений: 15,168
|
|
| 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
Сообщений: 136
|
|
| 16.01.2024, 20:27 [ТС] | |
|
я и так все не комментирую а то что мне нужно
Добавлено через 3 минуты Еще полезно будет == и < и [] так ни кто и не подсказал за все время. но зато я почерпнул много разных советов сейчас пока обдумываю как рефакторить свой класс.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||
| 16.01.2024, 20:30 | ||
|
Иначе "подсказка" превратится в переписывание вашего кода для нормальной организации необходимых перегрузок. Править наживую, прямо по вашему коду и ничего не переделывая, можно, но дело это неблагодарное (не стоит затраченных усилий).
1
|
||
|
1 / 1 / 0
Регистрация: 30.03.2017
Сообщений: 136
|
|
| 16.01.2024, 20:32 [ТС] | |
|
0
|
|
|
фрилансер
6472 / 5690 / 1131
Регистрация: 11.10.2019
Сообщений: 15,168
|
||||||
| 16.01.2024, 20:34 | ||||||
|
Signum7, внутри класса string:
0
|
||||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||
| 16.01.2024, 20:36 | |||
|
Можно даже схитрить и добавить string - и тогда вообще все готовенькое на блюдечке будет ![]() Добавлено через 1 минуту Ну или книжку любую открыть по С++, там точно будет глава "перегрузка операторов", где все подробно написано. Не понятно какая подсказка нужна, потому и нет их.
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
||||||
| 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
Сообщений: 136
|
||||||||
| 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
Сообщений: 136
|
||||||
| 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 | |
|
Помогаю со студенческими работами здесь
40
Написать класс "Дата" с перегрузкой операторов
Перегрузка операторов. Класс String Свой класс String Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|