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

10 просмотров

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

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

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

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

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

@Aiwan что такое база образца?
Alexey
27
Не многие знают, а кто знает, тот уже успел забыть, что в далёком 2004 году эта игра произвела настоящий фурор, настолько революционной была технология, применяемая для её соз...
ICCID
4
Короче я тут узнал полный пиздец Что кучу постов которые я создавал через posted Спустя время не могу редактировать и менять Мол телега возвращае ошибку Это реально так ...
inc.
13
коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
Хотя у меня сейчас есть более сложная задача, вот её думаю: как объяснить челу переходного возраста противоположного полу, обучающегося в польском колледже (а-ля наш техникум)...
Вячеслав Кузьменко
15
Добрый день Хочу начать обучение языку, не являюсь представителем it, буду благодарна за помощь, совсем пока не понимаю ничего) Подскажите, пожалуйста, где можно начать первы...
Sara Lala
30
что читать по делфи?вообще 0 в нем
fd dsds
9
const dirname = new URL((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new UR...
Kirill Shaplyko
4
how would you do any of that offline?
Thomas
7
верно что я могу удалить эти addq и subq т.к. со стеком никакого взаимодействия нет (исключая call)?
Michael
16
Карта сайта