@ProCxx

Страница 749 из 2477
/dev
03.04.2017
14:19:57
вот почему я хочу быть в чате с людьми, которые понимают, как это работает
эти же люди и в #supapro сидят, когда время появляется и желание помочь

Michael
03.04.2017
14:20:26
в супапро помимо этого наверняка много вопросов которые еще ниже

кстати зайду я туда может сам смогу чем-то помочь чувакам

ну вот такого типа

Google
Michael
03.04.2017
14:21:10
Можете подсказать какие библиотеки важны в с++ и какие стоит изучить в первую очередь

вот поэтому лучше тут чем не тут.

у меня хотя бы вопросы конкретные...

Anatoly
03.04.2017
14:22:54
Можете подсказать какие библиотеки важны в с++ и какие стоит изучить в первую очередь
некоррекный вопрос, используй (и соответственно изучи) те, которые используешь для решения задачи

Michael
03.04.2017
14:23:13
я привел это как пример тупого вопроса

Anatoly
03.04.2017
14:23:39
сорри, не понял

Michael
03.04.2017
14:23:47
не за что

кстати мнения немножко разделились

вот Андрей считает что мув надо указывать эксплсит если это важно. (но рво и так позаботится) ты считаешь, что можно не паритсья, и точно позаботится

что так или иначе произойдет или рво, или мув

Tema
03.04.2017
14:26:10
что так или иначе произойдет или рво, или мув
на рво не надейся, сам не плошай

Anatoly
03.04.2017
14:26:13
return value optimization - это оптимизация, которую компилятор МОЖЕТ сделать

Google
Michael
03.04.2017
14:26:23
да, но вот вопрос

насколько часто он делает на практике?

babysitter
03.04.2017
14:26:30
std::vector<> v = std::move(muFunc());
Не нужно так писать

Tema
03.04.2017
14:26:46
Не нужно так писать
откуда ты знаеш

Michael
03.04.2017
14:26:48
инлайн - тоже операция, которую компилятор МОЖЕТ сделать, но это же не повод форсинлайнить все вручную

Anatoly
03.04.2017
14:26:51
std::move явно здесь не нужен

Michael
03.04.2017
14:26:55
Tema
03.04.2017
14:27:18
я бы вообще не парился и делал всё в на куче

Anatoly
03.04.2017
14:27:32
поскольку myFunc возвращает временный объект, который подходит под vector&&

Artem
03.04.2017
14:27:36
http://stackoverflow.com/a/17473869

Michael
03.04.2017
14:27:37
окей, это тот самый ответ который я хотел слышать

Tema
03.04.2017
14:27:37
и заворачивал в уник поинторы

и бед не знал бы

Surreal
03.04.2017
14:27:43
а как нужно?
Вы таким образом явно убиваете возможность rvo, которое быстрее move.

Michael
03.04.2017
14:28:16
компилятор не дедуцирует, что мув нафиг не нужен и не поступает по-своему?

я вот почему-то думаю, что должен

Andrei
03.04.2017
14:28:30
При этом надо делать

Anatoly
03.04.2017
14:28:48
само собой

Google
Michael
03.04.2017
14:29:01
что вообще из себя представляет вызов std::move()?

это враппер или абстракция компилятора?

Surreal
03.04.2017
14:29:11
я вот почему-то думаю, что должен
Эээ, вы ему явно говорите мувать, а он такой, не, я лучше тут копи элизион запилю.

Andrei
03.04.2017
14:29:15
Michael
03.04.2017
14:29:23
понял

Anatoly
03.04.2017
14:29:40
это заставляет компилятор перенести состояние одного объекта в другой

после std::move(object) object уже не будет владеть состоянием, которым владел до мува

babysitter
03.04.2017
14:30:29
Погодите, что за бред. Какой return std::move(); для локального вектора.

Michael
03.04.2017
14:30:37
в общем, в моем конкретном случае мне стоит не громоздить и полагаться на RVO до тех пор, пока профайлинг не скажет, что это, чувак, было плохо

babysitter
03.04.2017
14:30:47
Приеду майерса открою.

Anatoly
03.04.2017
14:30:49
локальй вектор и std::move

нормально

babysitter
03.04.2017
14:31:20
Просто возврат по значению хорошо сработать должен.

Michael
03.04.2017
14:31:37
блин, какая интересная тема

вопрос из основ, а мнений минимум два

а нет, три точно есть

Surreal
03.04.2017
14:32:19
Потому что реализация не стандартизована.

Anatoly
03.04.2017
14:32:41
локальный объект != временный

Andrei
03.04.2017
14:33:06
Google
Tema
03.04.2017
14:33:09
что плохого если он зделает данные в куче и вернёт уник поинтор?

мувнет

это пижже рво?

Andrei
03.04.2017
14:33:17
return std::move(vec); не будет

Michael
03.04.2017
14:33:24
сейчас задался вопросом могу ли я не городить в кучу и вернуть значение

отсюда и вопрос

Surreal
03.04.2017
14:33:47
это пижже рво?
Нет, вы возвращаете и копируете указатель.

babysitter
03.04.2017
14:34:10
return std::move(vec); не будет
Так копи элижн это хорошо, почему вы пытаетесь быть умнее компилятора

Tema
03.04.2017
14:34:13
Surreal
03.04.2017
14:34:30
уник поинтор нескопировать
Сам указатель, адрес.

Tema
03.04.2017
14:34:41
Сам указатель, адрес.
да, его копируем, это хор

Andrei
03.04.2017
14:34:44
Никто не спорит.

Surreal
03.04.2017
14:34:49
при rvo у вас передается указатель в стек фрейм вызова и все.

Andrei
03.04.2017
14:35:14
Я просто говорю, что можно зафорсить move.

Вот таким способом.

А так да, конечно RVO это круто.

babysitter
03.04.2017
14:35:53
Зафорсить можно, но не нужно.

Andrei
03.04.2017
14:35:58
Иногда нужно.

Google
Michael
03.04.2017
14:36:11
кстати если конкретнее то я возвращаю не вектор

я возвращаю map map'ов

вопрос: все еще никаких осложнений?

Anatoly
03.04.2017
14:36:33
все нормально

babysitter
03.04.2017
14:36:44
Если возможно, то будет копи элижн и это хорошо, если невозможно без всяких мув будет мув-конструктор.

Andrei
03.04.2017
14:36:46
Покуда он у тебя на локальном стеке был создан — всё ок.

Michael
03.04.2017
14:36:46
ну вот и мне показалос. контейнер он и есть контейнер

Andrei
03.04.2017
14:37:07
Если он создан на стеке глубже — уже не факт.

Michael
03.04.2017
14:37:47
Если он создан на стеке глубже — уже не факт.
а разве он не передастся наверх рекурсивно?

из скоупа в скоуп

Andrei
03.04.2017
14:38:04
Но это всё равно не избавляет от надобности написать move или copy конструктор, не смотря на то, что он даже не вызывается.

Anatoly
03.04.2017
14:38:11
Если возможно, то будет копи элижн и это хорошо, если невозможно без всяких мув будет мув-конструктор.
std::move(local) - поддерчикает твое намерение зафорсить передачу состояния, он не помешает RVO

Andrei
03.04.2017
14:39:19
а разве он не передастся наверх рекурсивно?
Не, оно то может и передаётся, но я не уверен, что в плюсах по цепочке вызовов будет RVO

Из одной функции точно будет.

Michael
03.04.2017
14:39:38
ну, как я понимаю, там может оказаться имплисит мув рано или поздно

если коллстек глубоко

что в общем-то тоже неплохо

Andrei
03.04.2017
14:40:25
ну, как я понимаю, там может оказаться имплисит мув рано или поздно
Зависит от семантики объекта. Anyway компилятор скажет, если забыл что-то определить.

Страница 749 из 2477