Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1

STL и rvalue ссылки

05.06.2019, 17:03. Показов 1284. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Помню как-то читал инфу о том, что в стандартных контейнерах rvalue работают, как lvalue. Те имеется ввиду, что имеется два конструктора для контейнера. Один принимает lvalue, другой rvalue. Однако, если передать rvalue, то все-равно будет вызван конструктор для lvalue. Почему и как это обойти там было сказано, но я уже забыл. Нагуглить не получается снова эту статью. Кто что может сказать по этому поводу или может даст ссылку?
Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.06.2019, 17:03
Ответы с готовыми решениями:

Зачем нужны rvalue ссылки, если есть универсальные ссылки
Читаю книгу Скотта Мэйерса... Что-то я совсем запутался с этими rvalue ссылками. Я не пойму, зачем нужны rvalue ссылки, если есть...

Ссылки от rvalue
Доброго времени суток, господа! Начал читать статью про rvalue ссылки на хабре и что-то много вопросов появилось, вот. void...

rvalue ссылки
Может кто объяснить зачем нужны rvalue ссылки и как правильно работать с std::move и std::forward?

7
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
05.06.2019, 17:09
Лучший ответ Сообщение было отмечено Джон Кофи как решение

Решение

Цитата Сообщение от Джон Кофи Посмотреть сообщение
Привет. Помню как-то читал инфу о том, что в стандартных контейнерах rvalue работают, как lvalue. Те имеется ввиду, что имеется два конструктора для контейнера. Один принимает lvalue, другой rvalue. Однако, если передать rvalue, то все-равно будет вызван конструктор для lvalue. Почему и как это обойти там было сказано, но я уже забыл. Нагуглить не получается снова эту статью. Кто что может сказать по этому поводу или может даст ссылку?
Скорее всего имеется ввиду, что если у элементов контейнера нет noexcept move-конструктора, то контейнер будет всегда вызывать для них конструктор копирования
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
05.06.2019, 17:10
Цитата Сообщение от Джон Кофи Посмотреть сообщение
Однако, если передать rvalue, то все-равно будет вызван конструктор для lvalue.
Тогда зачем нужен конструктор принимающий rvalue, если он все равно не вызывается?))
Это где вы такое вычитали? Что за контейнер, какие конструкторы?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
05.06.2019, 17:15
Цитата Сообщение от Undisputed Посмотреть сообщение
Тогда зачем нужен конструктор принимающий rvalue, если он все равно не вызывается?))
Он не вызывается только если он может выдать исключение. Если он помечен как noexcept, то вызовется нормально

Добавлено через 1 минуту
Потому что, если во время перемещения объектов возникнет исключение, то контейнер может оказаться в неконсистентном состоянии - половина элементов перемещена, половина - нет

Добавлено через 1 минуту
Например - std::vector<std::list<int>> будет копировать списки, а std::vector<std::vector<int>> - перемещать
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
05.06.2019, 17:16
oleg-m1973,
Я в курсе насчет noexcept и перемещающих конструкторов, спасибо
Но тут вопрос вроде как поставлен иначе...
0
 Аватар для Джон Кофи
266 / 81 / 18
Регистрация: 05.04.2018
Сообщений: 1,102
Записей в блоге: 1
05.06.2019, 17:20  [ТС]
Цитата Сообщение от Undisputed Посмотреть сообщение
Это где вы такое вычитали?
не помню
Цитата Сообщение от Undisputed Посмотреть сообщение
Что за контейнер
любой STL
Цитата Сообщение от Undisputed Посмотреть сообщение
какие конструкторы?
принимающие rvalue/lvalue
Цитата Сообщение от Undisputed Посмотреть сообщение
Но тут вопрос вроде как поставлен иначе...
нет, oleg-m1973 мой вопрос правильно понял.
oleg-m1973, Спасибо, кажется это то, что я хотел узнать.
0
05.06.2019, 17:27

Не по теме:


Джон Кофи,
Ну отлично :)
Я не догадался что речь об этом

0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
05.06.2019, 17:50
Цитата Сообщение от Джон Кофи Посмотреть сообщение
любой STL
Это относится к контейнерам, которые копируют/перемещают сами элементы.
Какой-нибудь map или list перемещают только собственные узлы, соответственно,
при перемещении они вообще не вызывают никаких конструкторов у содержащихся элементов.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.06.2019, 17:50
Помогаю со студенческими работами здесь

Rvalue ссылки
Литературу читаю, но доезжаю медленно(если знаете где доступно описано- напишите),тяжело болею умственной анорексией. 1.Так вот о...

Rvalue и lvalue ссылки
Здравствуйте, что расскажите, пожалуйста что такое lvalue и rvalue ссылки и с чем их едят, где можно использовать, и чем отличается...

RVALUE ссылки и операции с ними
Господа знатоки у меня вопрос следующий. Увидел недавно такую запись &quot;T&amp;&amp; a&quot;, узнал что это rvalue ссылки, вроде как разобрался что это и...

Запретить initializer-list конструктору принимать rvalue значения/ссылки
Здравствуйте! Опишу проблему из заголовка поста на примере... Допустим есть шаблонный класс с initializer-list конструктором: ...

Ссылка на rvalue, является ли она сама rvalue?
А верно ли, что ссылка на rvalue сама не является rvalue? Вот такой код является валидным: #include &lt;iostream&gt; int main() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru