просто к && кастует. как оно перемещение делает?
std::move это тайпкаст и есть
Никак, он не перемещает. Перемещает конструктор
Или не перемещает
перемещает, ничего не сделать это корректное перемещение)
окей, мне приходит в функцию std::vector<char>&& v_ . Зачем мне его кастовать к std::vector<char>&& если v_ уже имеет этот тип?
Перемещения в таком случае не было )
переменная v_ имеет этот тип, а выражение v_ имеет тип std::vector<char>&
ну вот смотрите int x = 0; int & y = x; //почему в этой строке вы не кастовали int к int& ?
Потому что у нас всего два варианта дизайна языка в следующей ситуации: void foo(std::vector<char>&& vec) { bar(vec); // copy to bar baz(vec); // move to baz } Эти операции неразличимы – мы либо должны явно указать, что копируем в первом случае, либо явно указать, что перемещаем во втором. Либо оба одновременно. По некоторым историческим причинам было выбрано решение явно требовать указание на необходимость перемещения
значит это неявный каст был
Конструктор вызвался – значит было с точки зрения языка вне зависимости от вкладываемой вами в это семантики
Он невозможен, скажем нельзя инициализировать 0
потому что выражение x имеет тип int& ?
В общем, вам нужно прочитать раздел value category
где? в стандарте где тысячи страниц?
Хотя бы на хабре
спасибо, почитаю
https://habr.com/ru/post/441742/
Стандарт для разработчиков комплиляторов и холиваров в прохе
Если что есть такая фещь как ctrl+f
https://t.me/probuildsystems/44331
Здесь для начала или в переводе этой же серии статей, я уверен, что такой был
https://eel.is/c++draft/basic.lval
Меньше двух. И прочитать всего лишь коротенький раздел
Это не спека х86
Это не так страшно как кажется
Обсуждают сегодня