если есть функция func, внутри которой создается объект какого-нибудь класса A, и возвращается из нее
Тогда при A a = func() произойдет одно копирование? Когда объект из локальной переменной нужно будет скопировать в переменную "a", на другое место в стеке по сути
Но если выражение будет сложнее, например, такое
B b = func() + c
Где "c" будет объектом какого-нибудь другого класса C, а между классами C и A будет определен оператор +, возвращающий тип B (простите за сложность)
Вопрос именно в том, будет ли в последнем выражении результат func() скопирован куда-нибудь? Будет ли вызван конструктор копирования
Сама не могу разобраться, потому что компилятор оптимизирует возможно, и опытным путем тут не разберешься)
В последних ревизиях языка обычно при A a = func() происходит в худшем случае перемещение (либо ничего: компилятор в этом случае вправе рассматривать имена внутри и вне функции как ссылающиеся неявно на один объект - это называется copy-elision или NRVO; это одна из двух нормативно прописанных необязательных оптимизаций, т.е. могущих повлиять на наблюдаемое поведение и не гарантируемых). Во втором случае (B b = func() + c) выполнится то же в отношении первого параметра перегруженного оператора. После этого то же (но в отношении возврата этого оператора) будет применимо для инициализации b. Edit: B b = func() + c; это B b = operator+(func(), c); Т.е. аргумент func() инициализирует первый параметр выбранного operator+().
Спасибо большое, стало понятнее
Експр или результат вычисления выражения всегда будет rvalue. Соответственно присвоение lvalue = rvalue будет пытаться использовать либо вообще copy elision или мув конструктор. Это если ваши А, Б, С корректно написаны. ПС. Какого пня Вы в с++ делаете?
Нормативно про copy-elision здесь (в этом случае). Справочно - здесь. Второе, наверное, будет лучше.
ну, а чего еще делать, если интересно
Стоит уточнить, что только в этом случае (пытаться выдавать lval на локальный объект всегда ведет к неопределенностям).
У меня жена победительница математических олимпиад, в свое время Я в какой то степени ввиду этого ее и выбрал. Умная. Но ноюанс в том, что во время беременности под влиянием повышенного уровня прогестерона в мозгу самки образуется масса дополнительных паразитных связей между полушариями через мозолистое тело. Это физиологический и необратимый процесс После беременности Ваш мозг уже будет не тем. В ближайшей перспективе Вы либо не женщина, либо не программист.
/warn лютый оффтоп
Отличные критерий! Я выбирал от обратного, не специально но так получилось, но получилось всё равно хорошо
Насчёт женщины не программист ну тут как бы я Раз на раз не приходится иной раз и мужик такой дебил программист что туши свет.... А иногда и женщина такой Программист что вам и не свинилось...
19 реакций! Иду на абсолютный рекорд по количеству реакций на пост для всего supapro! ПС. Что интересно, так то что отметились мужские ники. Девочки помалкивают.
> cpp > девочки либо одно, либо другое - всё сразу нельзя
Дяденька, а дяденька, Вы таблеточки забыли принять. А вообще, Ваши вчерашние посты были, во первых, не к месту, а во вторых - глупы по большей части. Странно, что Вам админы ничего не сказали...
Просто было очень смешно, не мог...
Ну смех смехом, а девушку он оскорбил, просто потому, что ему так захотелось. И указывал, где ей есть место, а где нет. Это не должно быть позволительно.
Вы уж простите меня,но значит не такая и умная. А про беременность, связи и мозг - чушь несусветная. Ссылки на достоверные исследования. У меня тоже супруга математик ,и после двух беременностей,ни каких изменений в мозгу нет. Все также помогает мне решать задачи в ML(конкретно в reinforcement learning). И не стоит грубить девушке ,может быть она станет премного лучше вас в плюсах.
Никакой грубости и оскорблений в моем посте не было. Только краткая оценка на основе жизненной опытности. К слову, у меня на предприятии, около 50 женщин в разное время проработало. Всяких типажей насмотрелся. В том числе и осознанных "чайлд-фрее" особ. Это их выбор. ПС. Отвечаю, только потому, что уже второй пост прямо мне с обвинениями в оскорблениях. Глубокая дискуссия на эту тему непрофильна для этого чата.
Какого пня вы в .... Это грубость. Будьте немного добрее и мягче с людьми, пожалуйста. Лан,согласен ,что наша дискуссия напрямую не относится к профилю чата.
я думаю ваша оценка как раз и попадает под категорию смайликов, которых вам оставили больше всего.
рекорд по клонуским смайликам, вроде как
Емае. Что плюсы делают с людьми. А говорила мне мама что компьютеры зло.
Да пошутил же человек. Беззловбно, но на НЕАДЕКВАТНУЮ ТЕМУ. Предлагаю понять и простить.
А той девахе?( Это она спровоцировала
У тебя все дома?
Спровоцировала чем? своим существованием?
хочешь побить рекорд что ли?
Рекорд по скорости покидания?
рекорд реакций клоуна
а че ник не signed integer?
И меня прошу простить,за поднятый шум. )
хз стоит пораьотать над чувством юмора
Обсуждают сегодня