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

Друзья, разбираюсь с семантикой перемещения в c++11, в тч и

с помощью этой лекции:
https://youtu.be/oQDOqB1asNw
(2-5 минуты введут в контекст, но можно и без этого понять суть вопроса)

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

Вот один из взглядов на это:
https://docs.microsoft.com/ru-ru/cpp/cpp/temporary-objects?view=msvc-160

В указанной выше статье есть 3 пункта с причинами создания временных объектов:
1.(непонятно) Для сохранения результата приведения к пользовательскому типу. Когда объект заданного типа явно преобразуется в пользовательский тип, этот новый объект создается как временный. (Почему «этот новый объект создаётся как временный»?)
2.(непонятно) Для инициализации const ссылки с инициализатором типа, отличного от базового типа для инициализированной ссылки. (Тут речь о неявном преобразовании в процессе?)
3.(непонятно) Для сохранения возвращаемого значения функции, которая возвращает пользовательский тип. Эти временные объекты создаются только в том случае, если программа не копирует возвращаемое значение в объект. (Что значит «если программ не копирует …»? Примеры с копированием и без внесли бы ясность?).
Спасибо

10 ответов

20 просмотров

Простите, а в чём вопрос? И если речь идёт о временных объектах, нужно брать материал 17 стандарта

Игорь-Ильич Автор вопроса
Constantine Drozdov
Простите, а в чём вопрос? И если речь идёт о време...

Там 3 вопроса Непонятны сами случаи, когда что-то является временным объектом

Игорь Ильич
Там 3 вопроса Непонятны сами случаи, когда что-то...

Мне не очень понятно выражение "являться временным объектом"

Игорь-Ильич Автор вопроса
Constantine Drozdov
Мне не очень понятно выражение "являться временным...

И мне также В лекции регулярно используется это словосочетание Через него лектор выражает суть разного типа ссылок

Игорь Ильич
И мне также В лекции регулярно используется это сл...

Возможно, автор на самом деле говорит о категориях значений

1) есть выражение, в нём надо сделать приведение типа для вычисления выражения. Для этого компилятор должен создать временный объект целевого типа. Других вариантов вообще нет. 2) Тут то же самое что (1) , только этот временный объект ещё и решили поименовать. Это кстати абсолютно дурацкий стиль кода, но С++ его , как видишь, поддерживает (и ничего плохого не будет без const_cast) 3. В случае если объект возврата из фукнции копируется куда-то, то через RVO объект возврата может быть сразу же помещён в целевую переменную. Но может и НЕ быть помещён, тогда будет требоваться временный объект. Тут видимо твои лекции не до конца точны, ибо RVO всегда является опциональным, оно может не применяться.

Игорь-Ильич Автор вопроса
Ilya Zviagin
1) есть выражение, в нём надо сделать приведение т...

Спасибо, всё понял Интересно, что в 3 случае может быть два варианта

Ilya Zviagin
1) есть выражение, в нём надо сделать приведение т...

В данном контексте что можно сказать про алиасинг? Пользовался либой в которой выражение A = B + C всегда сначала создавался временный обьект, так как возможно выражение A = A + C, а при операции A + C размер A мог измениться

Игорь-Ильич Автор вопроса
Ilya Zviagin
1) есть выражение, в нём надо сделать приведение т...

Почему возможность описанную во втором пункте называете дурацкой? Какие неприятности от этого можно получить? В пункте 3, вы все верно пишите, просто я скинул не весь фрагмент, оригинал: «Для сохранения возвращаемого значения функции, которая возвращает пользовательский тип. Эти временные объекты создаются только в том случае, если программа не копирует возвращаемое значение в объект.» Что касается temporary object, понравилась эта статья (пункт Temporary object lifetime) https://en.cppreference.com/w/cpp/language/lifetime

Игорь Ильич
Почему возможность описанную во втором пункте назы...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта