|
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
|
||||||||||||||||
Приведение типов в классе26.05.2015, 22:44. Показов 2107. Ответов 35
Метки нет (Все метки)
Добрый день всем, кто увлекается.
Столкнулся с такой проблемой. Есть класс String (костыль собственного производства). Хочу перегрузить операцию сложения с прототипом:
0
|
||||||||||||||||
| 26.05.2015, 22:44 | |
|
Ответы с готовыми решениями:
35
Приведение типов Приведение типов приведение типов |
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||
| 28.05.2015, 00:06 | |||||||
|
Ну или в реализации стандартной библиотеки, по-твоему, подход через-жопный?
0
|
|||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 28.05.2015, 00:12 | ||
|
Это не просто сокращение строк, это чёрная магия которую надо бояться.(я про "//ну или:" вариант) Не по теме: castaway, Что-то нынче не в настроении :)
0
|
||
| 28.05.2015, 00:14 | |
|
0
|
|
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
| 28.05.2015, 00:18 | |
|
я вот пока сочинял тут уже понаписали. тем не менее:
а мне все больше становится понятно, что я тебя лично чем-то задел. чем - хз. я привел два примера. первый почти по всем канонам, второй - альтернатива для любителей писать хитрый код ради экономии пары строк кода. примеры были приведены по запросу типа, покажи на сколько это просто. примеры приведены, они простые. несовпадение сигнатур могло быть и опечаткой, однако простота реализации была бы понятна даже новичку. тебе понадобилось зачем-то докопаться до этого и даже после пояснений что к чему - ты продолжаешь. Что значит допустим тебе нужны? ну нужны, не используй второй вариант. В случае наследников можем получить срезку объекта, которая все испортит. Хотя выглядит надуманно. Есть еще варианты? Если есть - опять же не используй. По поводу авторитетов: Страуструп в своей книге приводит примеры именно такой реализации. Недостаточно авторитетно? Ну извини, добавить тут больше нечего.
0
|
|
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 28.05.2015, 00:24 | ||
Мой мир перевернулся, а я так верил в стл
0
|
||
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
||
| 28.05.2015, 00:26 | ||
|
до кучи еще раз процитирую сам себя:
или что-то подобное. лень смотреть в исходники
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||
| 28.05.2015, 00:38 | |||||||
![]() Добавлено через 8 минут Nosey, В добавок к этому, реализацию можно улучшить, например, встречается и такой вариант (это из студии 2013):
0
|
|||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 28.05.2015, 00:40 | ||
![]() Добавлено через 1 минуту Вот второй вариант - это отлично, и ведь не сложно. Эх, ГыЦыЦы
0
|
||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||
| 28.05.2015, 01:00 | ||
чёрная магия превращается в серенькую
0
|
||
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
| 28.05.2015, 01:08 | |
|
я уже объяснил зачем так сделано. но что-то не все прониклись. в связи с этим вопросы:
что принципиально меняется? кто-то закладывался на сигнатуры с константными ссылками где-то? в стандарте что-то написано на этот счет? интересно где? во второй реализации есть временный объект да, зато его можно менять и это избавляет от необходимости создавать внутри функции точно такой же объект-копию. в случае с константной ссылкой создается объект-копия внутри функции. весь код, который компилился в случае константныйх ссылок будет компилится и когда первый - аргумент - просто объект. (ситуацию с указателями на функии не рассматриваем). срезка в случае наследования будет в обоих вариантах вроде.
1
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 28.05.2015, 01:16 | ||
|
Я согласен с castaway, что второй вариант слегка стремный. Хотя бы потому, что убивает возможность оптимизаций, которые я выше приводил. Собственно, как я уже говорил, в эту тему я влез только для того, чтобы защитить сам подход через +=, а не какую-то конкретную реализацию.
0
|
||
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
| 28.05.2015, 02:09 | |
|
вот спец вопрос задан на эту тему:
Реализация operator + через operator +=
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 29.05.2015, 18:24 | ||
|
Т.е. конструктор копии на самом деле не выделяет память и ничего не копирует, но сохраняет ссылку на строку из параметра. Реальное выделение памяти и копирование происходит при вызове append, где уже учитываются длины обеих строк.
1
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 29.05.2015, 18:39 | |
|
0
|
|
| 29.05.2015, 18:39 | |
|
Приведение типов
Приведение типов Приведение типов Приведение типов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|