Основы семантики перемещения в с++

  Рет қаралды 7,943

Полевой Дмитрий

Полевой Дмитрий

Күн бұрын

Пікірлер: 44
@userf155
@userf155 Ай бұрын
Вот такого блогера нам не хватало.
@dimbo4ka213
@dimbo4ka213 Ай бұрын
бро, продолжай снимать дальше! это самый качественный контент по плюсам во всем снг
@ИнякинАлександр
@ИнякинАлександр Ай бұрын
Самое главное в семантике перемещения это то, что std::move ничего не перемещает!
@R3v0ult
@R3v0ult Ай бұрын
Если ты про то, что std::move обёртка над memmove, то да
@КириллЧе-я5ы
@КириллЧе-я5ы Ай бұрын
@@R3v0ultвообще-то это обёртка над статик каст как правило…
@R3v0ult
@R3v0ult Ай бұрын
@@КириллЧе-я5ы, да, но у него 3 перегрузки и только 1 из них это статик каст
@КириллЧе-я5ы
@КириллЧе-я5ы Ай бұрын
@ а можно ссылочки, даже интересно, где реализуют таким образом вполне конкретную noexcept функцию, возвращающую по стандарту static_cast?.. хочу пополнить свой багаж знаний
@R3v0ult
@R3v0ult Ай бұрын
@@КириллЧе-я5ы, исходный код STL открыт. Можешь посмотреть реализацию STL в Visual Studio, если у тебя она есть, если нету, то реализация STL от GCC лежит на гитхабе (только у каждого реализация своя)
@Desotterro
@Desotterro Ай бұрын
Классный канал. Спасибо тебе!
@ИЖ-Ю
@ИЖ-Ю Ай бұрын
Лайк автору за его разборы. Добовляет понимание, над чем и с чем придётся работать. Предоставляет понимание в программировании.
@donlinoleum831
@donlinoleum831 Ай бұрын
Друг, огромное спасибо за видео!
@РоманКондратов-г1р
@РоманКондратов-г1р Ай бұрын
Ооо. Новое видео. Круто. Очень полезно. Спасибо большое
@Mercury13kiev
@Mercury13kiev Ай бұрын
Я их называю «временные ссылки». Злой шаблонщиной решить можно, но уровень языка хорош тем, что это может перемещать там, где раньше неявно копировалось (параметры, return), а также автоматически применять это для временных объектов. Да, рассказывая про forward, я говорю: снаружи функция требует временную ссылку. Но внутри (для безопасности - любая потеря данных хуже любой неоптимальности) параметр именованный, и потому std::move. По той же причине - выведением типов нельзя отличить T& от T&& - std::forward требует параметр. И ещё говорю, что move лишь говорит: «этот объект именованный, но, поверьте, его можно потрошить». Реальным потрошением занимается конструктор перемещения. Или любая другая функция с временной ссылкой.
@kirillpetrakov3282
@kirillpetrakov3282 Ай бұрын
На самом деле, можно, частино, решить проблему перемещения, обходясь исключительно l-value ссылками, не "убивая" семантику копирования. Как верно заметили, семантика перемещения включает в себя как минимум перегрузку конструктора и оператора присваивания. Т.е. мы можем создать любой другой конструктор, так, чтобы он отличался от конструктора копирования. Например, можно ввести новый класс, который в себе хранит ссылку на источник перемещения, и, примем как соглашение, что данный адаптер нужно использовать, когда необходимо переместить объект: template struct Movable { T& movable; }; Тогда можно сделать следующий конструктор class Example { public: Example(Example const&); // copy ctor Example(Movable&); // move-like ctor }; Далее уже можно развить эту тему для более удобного использования, но, как я уже говорил, это может лишь частично решить проблему, так как будет не доступна возможность создавать временный обект, который передается сразу как аргумент. Т.е. без полноценной поддержки новых типов ссылок нельзя было бы корректно написать что-то вроде: Example e(std::move(Example())); Причина в том, что время жизни такого временного объекта можно продлить только через l-value ссылку на константу, а перемещение требует чтобы ссылка была как раз таки не константная. Возможно кому-то может показаться что в таком случае можно применить снятие константности через const_cast, но это уже прямо таки конкретный костыль, который может привести к UB, и, лично я думаю, что именно эта причина была одна из основных в мотивации добавить именно новый вид ссылок для поддержки семантики перемещения.
@Vol_
@Vol_ Ай бұрын
Обожаю плюсы! Всегда найдётся способ выстрелить себе в ногу. =) Хотелось бы, чтобы автор также упомянул о том, что компилятор может предоставлять конструктор и оператор перемещения по умолчанию при определённых условиях. Надеюсь, в будущих видео будут раскрыты юз-кейсы использования семантики перемещения и различные её нюансы. Например, особенности при использовании с виртуальными классами, когда мы перемещаем объект производного класса через объект базового класса. Если не секрет, какая IDE используется в видео? Спасибо за видео, однозначно лайк!
@userf155
@userf155 Ай бұрын
QtCreator
@vilture5706
@vilture5706 Ай бұрын
Блин когда давно это знаешь, но кто то другой объясняет, то немного по-другому начинаешь понимать. Чаще это использовать буду.
@biryuk666
@biryuk666 Ай бұрын
Ого! А я думал канал загнулся... Its alive!🎉
@euhenydemida4456
@euhenydemida4456 Ай бұрын
Еще до std::move в примерах из видео, при инициализации срабатывала бы такая штука, copy elision. Тоже та еще хрень неочевидная…
@kunak1197
@kunak1197 Ай бұрын
Про NRVO и RVO надо бы упомянуть. Из-за гарантированного NRVO при возврате по значению, надо положить результат во временную переменную и возвращать еë. Вопрос по контейнерам STL. Если у объекта - элемента контейнера move конструктор (или move assignment operator) обьявлен не noexcept, то будет использован copy конструктор (оператор)? Если да, то каким образом определяется, что нет объявления noexcept?
@Тед-е8ы
@Тед-е8ы Ай бұрын
Если у вас такие большие объекты это либо одноразовая акция для инициализации или у вас что-то не так
@ted_res
@ted_res Ай бұрын
Простите, я не сишник. А чем вызвано острое желание держать объекты в стеке? Можно без головной боли работать с указателями, и тогда никакие копирующие конструкторы в принципе не вызываются - копируется сам указатель.
@arekusei9580
@arekusei9580 Ай бұрын
С памятью на стеке работа осуществляется быстрее
@ВикторГиль-ф2ф
@ВикторГиль-ф2ф Ай бұрын
@@arekusei9580 Это из за исключений, чтобы не потерять память. Исключения идут по стеку и освобождают выделенную память (RAII).
@DART2WADER
@DART2WADER Ай бұрын
Ты ещё про declval и launder расскажи))) Тогда у кого-то протечёт)))
@cavesalamander6308
@cavesalamander6308 Ай бұрын
Я все еще сижу на с++99 и счастлив. И стал еще счастливее со времен бурных изменений языка, превративших его в какую-то клинопись, да еще и зашифрованную.
@phusicus_404
@phusicus_404 Ай бұрын
Что ты пишешь? Где работаешь?
@denisgluk431
@denisgluk431 5 күн бұрын
К хорошему привыкаешь. На циклы в индексами к сожалению на чукотскую писменность похож. Я часто писал на машинах, где компилятор с пол тыка не обновишь. Мне нормально на устаревшем коде делать. Но выглядит очень клипово, каких-то мелочей очень не хватает.
@Jeweler-228
@Jeweler-228 Ай бұрын
Звук отстает
@Slavasil
@Slavasil Ай бұрын
нормальные люди смотрят на фоне)
@Тед-е8ы
@Тед-е8ы Ай бұрын
Я воще не вижу проблемы в том что выделять дважды память я вижу проблему в неразумно больших классах.
@trevoro.9731
@trevoro.9731 Ай бұрын
Термин "вектор" ввели всего 2 человека без каких-либо на то научных оснований. Его нужно вообще убрать из программирования за исключением математических векторов.
@Ma_X64
@Ma_X64 Ай бұрын
вроде ж после std17 это уже не нужОное?
@ВсеволодПарфёнов-ф2ъ
@ВсеволодПарфёнов-ф2ъ Ай бұрын
Это полный абзац.
@MichaelLenz1
@MichaelLenz1 Ай бұрын
Какая же гадость этот ваш цпп
@romankuznetsov4601
@romankuznetsov4601 Ай бұрын
Убери здоровенный микрофон в другое место плиз
@cavesalamander6308
@cavesalamander6308 Ай бұрын
- А куда его засунуть-то? - Поручик, молчать!!!
Леон киллер и Оля Полякова 😹
00:42
Канал Смеха
Рет қаралды 4,7 МЛН
Une nouvelle voiture pour Noël 🥹
00:28
Nicocapone
Рет қаралды 9 МЛН
黑天使只对C罗有感觉#short #angel #clown
00:39
Super Beauty team
Рет қаралды 36 МЛН
Арыстанның айқасы, Тәуіржанның шайқасы!
25:51
QosLike / ҚосЛайк / Косылайық
Рет қаралды 700 М.
A New Era for C and C++? Goodbye, Rust?
9:08
Travis Media
Рет қаралды 137 М.
ТАК ПРОГРАММИРОВАЛИ НАШИ ДЕДЫ
21:18
Honey Montana
Рет қаралды 108 М.
31 nooby C++ habits you need to ditch
16:18
mCoding
Рет қаралды 859 М.
Почему я программирую на С/C++ (язык для профессионалов!)
13:35
Леон киллер и Оля Полякова 😹
00:42
Канал Смеха
Рет қаралды 4,7 МЛН