бро, продолжай снимать дальше! это самый качественный контент по плюсам во всем снг
@ИнякинАлександрАй бұрын
Самое главное в семантике перемещения это то, что std::move ничего не перемещает!
@R3v0ultАй бұрын
Если ты про то, что std::move обёртка над memmove, то да
@КириллЧе-я5ыАй бұрын
@@R3v0ultвообще-то это обёртка над статик каст как правило…
@R3v0ultАй бұрын
@@КириллЧе-я5ы, да, но у него 3 перегрузки и только 1 из них это статик каст
@КириллЧе-я5ыАй бұрын
@ а можно ссылочки, даже интересно, где реализуют таким образом вполне конкретную noexcept функцию, возвращающую по стандарту static_cast?.. хочу пополнить свой багаж знаний
@R3v0ultАй бұрын
@@КириллЧе-я5ы, исходный код STL открыт. Можешь посмотреть реализацию STL в Visual Studio, если у тебя она есть, если нету, то реализация STL от GCC лежит на гитхабе (только у каждого реализация своя)
@DesotterroАй бұрын
Классный канал. Спасибо тебе!
@ИЖ-ЮАй бұрын
Лайк автору за его разборы. Добовляет понимание, над чем и с чем придётся работать. Предоставляет понимание в программировании.
@donlinoleum831Ай бұрын
Друг, огромное спасибо за видео!
@РоманКондратов-г1рАй бұрын
Ооо. Новое видео. Круто. Очень полезно. Спасибо большое
@Mercury13kievАй бұрын
Я их называю «временные ссылки». Злой шаблонщиной решить можно, но уровень языка хорош тем, что это может перемещать там, где раньше неявно копировалось (параметры, return), а также автоматически применять это для временных объектов. Да, рассказывая про forward, я говорю: снаружи функция требует временную ссылку. Но внутри (для безопасности - любая потеря данных хуже любой неоптимальности) параметр именованный, и потому std::move. По той же причине - выведением типов нельзя отличить T& от T&& - std::forward требует параметр. И ещё говорю, что move лишь говорит: «этот объект именованный, но, поверьте, его можно потрошить». Реальным потрошением занимается конструктор перемещения. Или любая другая функция с временной ссылкой.
@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_Ай бұрын
Обожаю плюсы! Всегда найдётся способ выстрелить себе в ногу. =) Хотелось бы, чтобы автор также упомянул о том, что компилятор может предоставлять конструктор и оператор перемещения по умолчанию при определённых условиях. Надеюсь, в будущих видео будут раскрыты юз-кейсы использования семантики перемещения и различные её нюансы. Например, особенности при использовании с виртуальными классами, когда мы перемещаем объект производного класса через объект базового класса. Если не секрет, какая IDE используется в видео? Спасибо за видео, однозначно лайк!
@userf155Ай бұрын
QtCreator
@vilture5706Ай бұрын
Блин когда давно это знаешь, но кто то другой объясняет, то немного по-другому начинаешь понимать. Чаще это использовать буду.
@biryuk666Ай бұрын
Ого! А я думал канал загнулся... Its alive!🎉
@euhenydemida4456Ай бұрын
Еще до std::move в примерах из видео, при инициализации срабатывала бы такая штука, copy elision. Тоже та еще хрень неочевидная…
@kunak1197Ай бұрын
Про NRVO и RVO надо бы упомянуть. Из-за гарантированного NRVO при возврате по значению, надо положить результат во временную переменную и возвращать еë. Вопрос по контейнерам STL. Если у объекта - элемента контейнера move конструктор (или move assignment operator) обьявлен не noexcept, то будет использован copy конструктор (оператор)? Если да, то каким образом определяется, что нет объявления noexcept?
@Тед-е8ыАй бұрын
Если у вас такие большие объекты это либо одноразовая акция для инициализации или у вас что-то не так
@ted_resАй бұрын
Простите, я не сишник. А чем вызвано острое желание держать объекты в стеке? Можно без головной боли работать с указателями, и тогда никакие копирующие конструкторы в принципе не вызываются - копируется сам указатель.
@arekusei9580Ай бұрын
С памятью на стеке работа осуществляется быстрее
@ВикторГиль-ф2фАй бұрын
@@arekusei9580 Это из за исключений, чтобы не потерять память. Исключения идут по стеку и освобождают выделенную память (RAII).
@DART2WADERАй бұрын
Ты ещё про declval и launder расскажи))) Тогда у кого-то протечёт)))
@cavesalamander6308Ай бұрын
Я все еще сижу на с++99 и счастлив. И стал еще счастливее со времен бурных изменений языка, превративших его в какую-то клинопись, да еще и зашифрованную.
@phusicus_404Ай бұрын
Что ты пишешь? Где работаешь?
@denisgluk4315 күн бұрын
К хорошему привыкаешь. На циклы в индексами к сожалению на чукотскую писменность похож. Я часто писал на машинах, где компилятор с пол тыка не обновишь. Мне нормально на устаревшем коде делать. Но выглядит очень клипово, каких-то мелочей очень не хватает.
@Jeweler-228Ай бұрын
Звук отстает
@SlavasilАй бұрын
нормальные люди смотрят на фоне)
@Тед-е8ыАй бұрын
Я воще не вижу проблемы в том что выделять дважды память я вижу проблему в неразумно больших классах.
@trevoro.9731Ай бұрын
Термин "вектор" ввели всего 2 человека без каких-либо на то научных оснований. Его нужно вообще убрать из программирования за исключением математических векторов.