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

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

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

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

33 ответов

10 просмотров

В последних ревизиях языка обычно при 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
Да пошутил же человек. Беззловбно, но на НЕАДЕКВА...

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

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
12
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Карта сайта