170 похожих чатов

Помогите, пожалуйста, разобраться:) Не очень понимаю, когда вызывается конструктор копирования Вот, например,

если есть функция func, внутри которой создается объект какого-нибудь класса A, и возвращается из нее
Тогда при A a = func() произойдет одно копирование? Когда объект из локальной переменной нужно будет скопировать в переменную "a", на другое место в стеке по сути
Но если выражение будет сложнее, например, такое
B b = func() + c
Где "c" будет объектом какого-нибудь другого класса C, а между классами C и A будет определен оператор +, возвращающий тип B (простите за сложность)
Вопрос именно в том, будет ли в последнем выражении результат func() скопирован куда-нибудь? Будет ли вызван конструктор копирования

Сама не могу разобраться, потому что компилятор оптимизирует возможно, и опытным путем тут не разберешься)

33 ответов

13 просмотров

В последних ревизиях языка обычно при A a = func() происходит в худшем случае перемещение (либо ничего: компилятор в этом случае вправе рассматривать имена внутри и вне функции как ссылающиеся неявно на один объект - это называется copy-elision или NRVO; это одна из двух нормативно прописанных необязательных оптимизаций, т.е. могущих повлиять на наблюдаемое поведение и не гарантируемых). Во втором случае (B b = func() + c) выполнится то же в отношении первого параметра перегруженного оператора. После этого то же (но в отношении возврата этого оператора) будет применимо для инициализации b. Edit: B b = func() + c; это B b = operator+(func(), c); Т.е. аргумент func() инициализирует первый параметр выбранного operator+().

unknown human- Автор вопроса

Експр или результат вычисления выражения всегда будет rvalue. Соответственно присвоение lvalue = rvalue будет пытаться использовать либо вообще copy elision или мув конструктор. Это если ваши А, Б, С корректно написаны. ПС. Какого пня Вы в с++ делаете?

unknown human
Спасибо большое, стало понятнее

Нормативно про copy-elision здесь (в этом случае). Справочно - здесь. Второе, наверное, будет лучше.

unknown human- Автор вопроса
Int Unsigned
Експр или результат вычисления выражения всегда бу...

Стоит уточнить, что только в этом случае (пытаться выдавать lval на локальный объект всегда ведет к неопределенностям).

unknown human
ну, а чего еще делать, если интересно

У меня жена победительница математических олимпиад, в свое время Я в какой то степени ввиду этого ее и выбрал. Умная. Но ноюанс в том, что во время беременности под влиянием повышенного уровня прогестерона в мозгу самки образуется масса дополнительных паразитных связей между полушариями через мозолистое тело. Это физиологический и необратимый процесс После беременности Ваш мозг уже будет не тем. В ближайшей перспективе Вы либо не женщина, либо не программист.

Int Unsigned
У меня жена победительница математических олимпиад...

Отличные критерий! Я выбирал от обратного, не специально но так получилось, но получилось всё равно хорошо

Int Unsigned
У меня жена победительница математических олимпиад...

Насчёт женщины не программист ну тут как бы я Раз на раз не приходится иной раз и мужик такой дебил программист что туши свет.... А иногда и женщина такой Программист что вам и не свинилось...

Int Unsigned
У меня жена победительница математических олимпиад...

19 реакций! Иду на абсолютный рекорд по количеству реакций на пост для всего supapro! ПС. Что интересно, так то что отметились мужские ники. Девочки помалкивают.

Int Unsigned
19 реакций! Иду на абсолютный рекорд по количеству...

> cpp > девочки либо одно, либо другое - всё сразу нельзя

Int Unsigned
19 реакций! Иду на абсолютный рекорд по количеству...

Дяденька, а дяденька, Вы таблеточки забыли принять. А вообще, Ваши вчерашние посты были, во первых, не к месту, а во вторых - глупы по большей части. Странно, что Вам админы ничего не сказали...

Ilya Zviagin
Просто было очень смешно, не мог...

Ну смех смехом, а девушку он оскорбил, просто потому, что ему так захотелось. И указывал, где ей есть место, а где нет. Это не должно быть позволительно.

Int Unsigned
У меня жена победительница математических олимпиад...

Вы уж простите меня,но значит не такая и умная. А про беременность, связи и мозг - чушь несусветная. Ссылки на достоверные исследования. У меня тоже супруга математик ,и после двух беременностей,ни каких изменений в мозгу нет. Все также помогает мне решать задачи в ML(конкретно в reinforcement learning). И не стоит грубить девушке ,может быть она станет премного лучше вас в плюсах.

Никакой грубости и оскорблений в моем посте не было. Только краткая оценка на основе жизненной опытности. К слову, у меня на предприятии, около 50 женщин в разное время проработало. Всяких типажей насмотрелся. В том числе и осознанных "чайлд-фрее" особ. Это их выбор. ПС. Отвечаю, только потому, что уже второй пост прямо мне с обвинениями в оскорблениях. Глубокая дискуссия на эту тему непрофильна для этого чата.

Int Unsigned
Никакой грубости и оскорблений в моем посте не был...

Какого пня вы в .... Это грубость. Будьте немного добрее и мягче с людьми, пожалуйста. Лан,согласен ,что наша дискуссия напрямую не относится к профилю чата.

Int Unsigned
Никакой грубости и оскорблений в моем посте не был...

я думаю ваша оценка как раз и попадает под категорию смайликов, которых вам оставили больше всего.

Stas Kovalenko
я думаю ваша оценка как раз и попадает под категор...

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

Int Unsigned
У меня жена победительница математических олимпиад...

Емае. Что плюсы делают с людьми. А говорила мне мама что компьютеры зло.

re_volt
Вы уж простите меня,но значит не такая и умная. А ...

Да пошутил же человек. Беззловбно, но на НЕАДЕКВАТНУЮ ТЕМУ. Предлагаю понять и простить.

А той девахе?( Это она спровоцировала

integer
А той девахе?( Это она спровоцировала

Спровоцировала чем? своим существованием?

Stas Kovalenko
хочешь побить рекорд что ли?

Рекорд по скорости покидания?

Ilya Zviagin
Да пошутил же человек. Беззловбно, но на НЕАДЕКВА...

И меня прошу простить,за поднятый шум. )

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта