Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1

Зачем может понадобиться чистое использование rvalue ссылок, типа T&& r = 5; (практическое применение)?

14.06.2019, 14:07. Показов 2056. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
зачем может понадобиться чистое использование rvalue ссылок, типа T&& r = 5; (практическое применение)

Добавлено через 12 минут
не вовремя написал, апну вечером
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.06.2019, 14:07
Ответы с готовыми решениями:

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. query='SELECT * FROM resume WHERE ' & ''' &...

Оператор && не может применяться к операндам типа string и int
Оператор && не может применяться к операндам типа string и string string a, b, c, d; a = "Avet"; ...

error '80020009' Îøèáêà. /lalala/profile.asp, line 28
При простейшем и сто раз работавшем скрипте, вылетает ошибка! след. содержания error '80020009' ...

17
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
14.06.2019, 14:15
Я могу сморозить чушь, но гуру меня поправят, если так
До нововведений в copy elision в С++17, что бы не вызывать лишний раз конструктор, например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct B
{
    B operator+(const B&other) { return B(); }
    void method1() {}
    void method2() {}
};
 
void foo(const B& obj) {}
 
int main()
{
    B a, b;
    B&& xb = a + b;
    xb.method1();
    xb.method2();
    foo(xb);
}
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.06.2019, 16:53  [ТС]
перефразирую T&& только для перфект форвайдинг?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
14.06.2019, 17:15
Цитата Сообщение от _stanislav Посмотреть сообщение
T&& только для перфект форвайдинг?
Если вы про шаблоны, то в конструкции template<class T> void foo(T&& arg){} arg это не
Цитата Сообщение от _stanislav Посмотреть сообщение
чистое использование rvalue ссылок
1
 Аватар для 7533620
163 / 70 / 39
Регистрация: 28.05.2019
Сообщений: 241
14.06.2019, 17:54
Цитата Сообщение от zayats80888 Посмотреть сообщение
B&& xb = a + b;
Этот код невалидный, ссылка на временный объект

Добавлено через 11 минут
Цитата Сообщение от _stanislav Посмотреть сообщение
зачем может понадобиться чистое использование rvalue ссылок
В основном это мув конструкторы и присваивание, все остальное (или почти все) можно универсальными заменить
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.06.2019, 18:04  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Если вы про шаблоны, то в конструкции
я не про шаблоны, я про то зачем нужно написать это:
C++
1
B&& xb = a + b;
0
 Аватар для 7533620
163 / 70 / 39
Регистрация: 28.05.2019
Сообщений: 241
14.06.2019, 18:06
Лучший ответ Сообщение было отмечено _stanislav как решение

Решение

Цитата Сообщение от _stanislav Посмотреть сообщение
я не про шаблоны, я про то зачем нужно написать это:
это не нужно писать
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.06.2019, 18:07  [ТС]
elseecay, читай название поста дядя
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
14.06.2019, 18:11
Цитата Сообщение от elseecay Посмотреть сообщение
Этот код невалидный, ссылка на временный объект
https://en.cppreference.com/w/... /reference
Rvalue references
Rvalue references can be used to extend the lifetimes of temporary objects (note, lvalue references to const can extend the lifetimes of temporary objects too, but they are not modifiable through them):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
int main() {
    std::string s1 = "Test";
//  std::string&& r1 = s1;           // error: can't bind to lvalue
 
    const std::string& r2 = s1 + s1; // okay: lvalue reference to const extends lifetime
//  r2 += "Test";                    // error: can't modify through reference to const
 
    std::string&& r3 = s1 + s1;      // okay: rvalue reference extends lifetime
    r3 += "Test";                    // okay: can modify through reference to non-const
    std::cout << r3 << '\n';
}
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.06.2019, 18:13  [ТС]
zayats80888, не уходи плиз в оффтоп, плиз
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
14.06.2019, 18:41
Цитата Сообщение от _stanislav Посмотреть сообщение
я про то зачем нужно написать это:
Ну я не спец, и с инглишем средненько. Может вы поймете лучше, про инициализацию временными объектами
https://en.cppreference.com/w/... py_elision
Under the following circumstances, the compilers are permitted, but not required to omit the copy and move (since C++11) construction of class objects even if the copy/move (since C++11) constructor and the destructor have observable side-effects. The objects are constructed directly into the storage where they would otherwise be copied/moved to. This is an optimization: even when it takes place and the copy/move (since C++11) constructor is not called, it still must be present and accessible (as if no optimization happened at all), otherwise the program is ill-formed:

...

In the initialization of an object, when the source object is a nameless temporary and is of the same class type (ignoring cv-qualification) as the target object. When the nameless temporary is the operand of a return statement, this variant of copy elision is known as RVO, "return value optimization".
(until C++17)
Добавлено через 19 минут
_stanislav, я так понял
C++
1
2
3
4
5
    // тут компиляторам разрешается не вызывать copy/move конструктор
    // хотя это чисто оптимизация, т. е. фактически могут (до С++17)
    B c = a + b;
    // тут мы copy/move конструктор точно не вызываем
    B&& xc = a + b;
1
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
14.06.2019, 19:24
_stanislav, продление жизни временному объекту, это самое банальное, потом форвардинг, он же std::forward, потом для std::move что бы не сделать из rvalue->lvalue и тд
1
14.06.2019, 19:34  [ТС]

Не по теме:

Цитата Сообщение от Azazel-San Посмотреть сообщение
продление жизни временному объекту, это самое банальное, потом форвардинг
ты где работаешь?

0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
16.06.2019, 11:15
Цитата Сообщение от _stanislav Посмотреть сообщение
практическое применение
C++
1
2
3
/*auto*/ T o = a + b;//1
/*auto*/ T && r = a + b;//2
/*auto*/ T const & r = a + b;//3
При первом варианте, для соблюдения семантики, тип объекта o обязан иметь доступный в данном контексте конструктор копирования/перемещения, даже если его вызова не будет. Начиная с C++17 этого не требуется.
Второй вариант и до C++17 позволял сохранить объект, даже если у него не было конструктора копирования/перемещения.
Третий вариант работал и до C++11, но при этом ссылка должна была быть константной (на константу), что накладывает некоторые ограничения на дальнейшие манипуляции.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
19.06.2019, 18:38  [ТС]
Croessmah, Azazel-San, zayats80888, я как более мене задумался, с точки зрения истории (с точки зрения автора языка) и как более менее отр....., мне более менее стало понятно, вам как всегда большой респ за поддержку.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
19.06.2019, 18:42

Не по теме:

Цитата Сообщение от _stanislav Посмотреть сообщение
ты где работаешь?
В одной компании


0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
19.06.2019, 18:44  [ТС]
Цитата Сообщение от _stanislav Посмотреть сообщение
Зачем может понадобиться чистое использование rvalue ссылок
смысл в том, почему у меня никогда не было мысли о таком вопросе:
Зачем может понадобиться чистое использование lvalue ссылок, типа const T& r = 5; (практическое применение)?

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Azazel-San Посмотреть сообщение
В одной компании
вам веселый сотрудник не нужен?

0
19.06.2019, 18:53

Не по теме:

Цитата Сообщение от _stanislav Посмотреть сообщение
вам веселый сотрудник не нужен?
Далеко ехать тебе будет, боюсь)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.06.2019, 18:53
Помогаю со студенческими работами здесь

Помогите найти драйвера для pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2
pci\ven_8086&amp;DEV_266E&amp;SUBSYS_A002145&amp;REV_05\3&amp;13C0B0C5&amp;0&amp;F2 Мультимедиа аудиоконтроллер помогите плз найти...

Мультимедиа контролер PCI\VEN_14F1&DEV_8800&SUBSYS_EA3D14F1&REV_05\4&25700A26&0&3020
Помогите пожалуйста найти драйвер на мультимедиа видеоконтролер ...

Нужен драйвера, код PCI\VEN_1039&DEV_7012&SUBSYS_0C98105B&REV_A0\3&B1BFB68&0&17
всем привет !! уменя нет звука нужен драйвер код PCI\VEN_1039&amp;DEV_7012&amp;SUBSYS_0C98105B&amp;REV_A0\3&amp;B1BFB68&amp;0&amp;17 скачал прогу их много ...

немогу найти драйвера на PCI\VEN_1039&DEV_7012&SUBSYS_810D1043&REV_A0\3&61AAA01&0&17
Мультимедиа аудиоконтроллер PCI\VEN_1039&amp;DEV_7012&amp;SUBSYS_810D1043&amp;REV_A0\3&amp;61AAA01&amp;0&amp;17

Драйвера на PCI\VEN_10B7&DEV_1700&SUBSYS_80EB1043&REV_12\4&2E98101C&0&28 F0
помогите плиз - вот ID: PCI\VEN_10B7&amp;DEV_1700&amp;SUBSYS_80EB1043&amp;REV_12\4&amp;2E98101C&amp;0&amp;28F0 Заранее...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru