Anatoly
а я и не говорю, что не работает
Anatoly
я говорю, что может быть все что угодно
Micktu 😬
угу, все понятно, спасибо
Micktu 😬
еще общий вопрос - если я возвращаю контейнер из функции и немедленно присваиваю -
std::vector<> myFunc();
...
std::vector<> v = muFunc();
- следуюет ли ожидать, что это будет мув или не расчитывать на это и указывать мув эксплиситли?
Andrei
Во-первых не будет ничего.
Andrei
Потому что RVO
Andrei
Во-вторых так как ты написал — это копи, а не мув.
Micktu 😬
ожидать, что рво позаботиится об этом?
Micktu 😬
или не надеяться, если это критично?
Micktu 😬
как это работает для меня?
Andrei
Это значит, что НЕ РАБОТАЕТ
Andrei
Andrei
если тебе нужен мув
Andrei
напиши мув
Andrei
если тебе нужна копия — напиши копию.
Deleted Account
std::vector<> v = std::move(muFunc());
Micktu 😬
то есть, до тех пор пока у меня синтаксис копирования, я могу расчитывать только на копирование, и все остальное зависит от меня?
Andrei
Да.
Micktu 😬
принято
Micktu 😬
спасибо, сенсей
Anatoly
если у тебя std::vector<> myFunc();
Anatoly
то при std::vector<> v = myFunc(); будет вызван перемещающий конструктор
Anatoly
vector(vector &&);
Micktu 😬
вот это я и спрашивал
Andrei
Micktu 😬
он же генерируется дефолтом, как и остальные, верно?
Anatoly
все будет в порядке
Anatoly
он генерируется дефолтом, если мебмеры имеют мув консруктор
Andrei
Генерируются имплиситли они только для POD-ов
Micktu 😬
это был волпрос вне контекста контейнеров уже
Andrei
Или для структур ггде у всех полей move есть
Micktu 😬
справедливо
Micktu 😬
и снова спасибо
Micktu 😬
вот почему я хочу быть в чате с людьми, которые понимают, как это работает
Nikita
Micktu 😬
в супапро помимо этого наверняка много вопросов которые еще ниже
Micktu 😬
кстати зайду я туда может сам смогу чем-то помочь чувакам
Micktu 😬
ну вот такого типа
Micktu 😬
Можете подсказать какие библиотеки важны в с++ и какие стоит изучить в первую очередь
Micktu 😬
вот поэтому лучше тут чем не тут.
Micktu 😬
у меня хотя бы вопросы конкретные...
Micktu 😬
Micktu 😬
я привел это как пример тупого вопроса
Anatoly
сорри, не понял
Micktu 😬
не за что
Micktu 😬
кстати мнения немножко разделились
Micktu 😬
вот Андрей считает что мув надо указывать эксплсит если это важно. (но рво и так позаботится)
ты считаешь, что можно не паритсья, и точно позаботится
Micktu 😬
что так или иначе произойдет или рво, или мув
Deleted Account
Anatoly
return value optimization - это оптимизация, которую компилятор МОЖЕТ сделать
Micktu 😬
да, но вот вопрос
Micktu 😬
насколько часто он делает на практике?
babysitter
Deleted Account
Micktu 😬
инлайн - тоже операция, которую компилятор МОЖЕТ сделать, но это же не повод форсинлайнить все вручную
Anatoly
std::move явно здесь не нужен
Micktu 😬
Deleted Account
Deleted Account
я бы вообще не парился и делал всё в на куче
Anatoly
поскольку myFunc возвращает временный объект, который подходит под vector&&
Artem
http://stackoverflow.com/a/17473869
Micktu 😬
окей, это тот самый ответ который я хотел слышать
Deleted Account
и заворачивал в уник поинторы
Deleted Account
и бед не знал бы
Surreal
а как нужно?
Вы таким образом явно убиваете возможность rvo, которое быстрее move.
Micktu 😬
компилятор не дедуцирует, что мув нафиг не нужен и не поступает по-своему?
Micktu 😬
я вот почему-то думаю, что должен
Andrei
Andrei
При этом надо делать
Anatoly
само собой
Micktu 😬
что вообще из себя представляет вызов std::move()?
Micktu 😬
это враппер или абстракция компилятора?
Andrei
Micktu 😬
понял
Anatoly
это заставляет компилятор перенести состояние одного объекта в другой
Anatoly
после std::move(object) object уже не будет владеть состоянием, которым владел до мува