|
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
|
||||||||||||||||
Приведение типов в классе26.05.2015, 22:44. Показов 2140. Ответов 35
Метки нет (Все метки)
Добрый день всем, кто увлекается.
Столкнулся с такой проблемой. Есть класс String (костыль собственного производства). Хочу перегрузить операцию сложения с прототипом:
0
|
||||||||||||||||
| 26.05.2015, 22:44 | |
|
Ответы с готовыми решениями:
35
Приведение типов Приведение типов приведение типов |
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||
| 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
|
||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|||||||
| 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
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 28.05.2015, 01:16 | ||
|
Я согласен с castaway, что второй вариант слегка стремный. Хотя бы потому, что убивает возможность оптимизаций, которые я выше приводил. Собственно, как я уже говорил, в эту тему я влез только для того, чтобы защитить сам подход через +=, а не какую-то конкретную реализацию.
0
|
||
|
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
|
|
| 28.05.2015, 02:09 | |
|
вот спец вопрос задан на эту тему:
Реализация operator + через operator +=
0
|
|
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
||
| 29.05.2015, 18:24 | ||
|
Т.е. конструктор копии на самом деле не выделяет память и ничего не копирует, но сохраняет ссылку на строку из параметра. Реальное выделение памяти и копирование происходит при вызове append, где уже учитываются длины обеих строк.
1
|
||
|
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
|
|
| 29.05.2015, 18:39 | |
|
0
|
|
| 29.05.2015, 18:39 | |
|
Приведение типов
Приведение типов Приведение типов Приведение типов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Часы электронные
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 реально казались вершиной жары, когда можно было весь день пропадать на. . .
|