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 ответов

12 просмотров

Простите, а в чём вопрос? И если речь идёт о временных объектах, нужно брать материал 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

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

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

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
70
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
25
Книга Юрова В.И пойдёт для обучения?
Botsman
24
Люди добрые, помогите с идеями, потому что свои закончились. У клиента падает софтина в момент инициализации модуля OtlEventMonitor на RegisterWindowMessage('Gp/OtlTaskEvents/...
Михаил Усков
7
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
> Примечательно, что новый владелец удаляет из GitHub любые жалобы, указывающие на подозрительную активность или смену владельца, и, видимо, рассчитывает на то, что пользовате...
Alex Sherbakov
2
GridView fully ignored first parent(SizedBox), and take width from second parent(Container). How can I constrain GridView by first parent? Widget build(BuildContext context) {...
Hamster
1
Hey there Which is the best Linux destro for developers (coding)? To my research on reddit, they said Linux mint is good for mid level spec and Ubuntu for high Lev hardwar...
Wiz 🪄
11
И ещё вопрос: можно ли типа как на дос как-то запариться и с помощью прерываний выводить текст, вместо функции printf ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
34
а мы ещё не созрели до того, чтобы создать отдельный чатик про настройку редакторов?
Cheese Syrowiecki
16
Карта сайта