Форум программистов, компьютерный форум CyberForum.ru

Ссылки на r-значения - C++

Восстановить пароль Регистрация
 
 
Ferrari F1
Заблокирован
296 / 282 / 62
Регистрация: 27.01.2015
Сообщений: 1,901
Записей в блоге: 1
Завершенные тесты: 1
04.08.2016, 09:33     Ссылки на r-значения #1
Дарова!
Знакомлюсь с r-value reference и как то трудно получается полностью вникнуть в них.
Так, например, возникает ошибка в main, но ведь ссылка может выступать как l значение
C++
1
2
3
4
5
6
7
8
9
10
int&& func()
{
    int i(1);
    return i + 2;
}
 
int main()
{
    func() = 8;
}
Или даже так, все равно то же самое
C++
1
2
3
4
5
6
7
8
9
10
int&& func()
{
    int i(1);
    return std::move(i + 2);
}
 
int main()
{
    func() = 8;
}
Добавлено через 25 минут
Или вот еще вопрос, верно ли, что в этом коде не происходит лишних копирований, т.е.
1) сперва вызывается func
2) потом в func вычисляется значение выражения i + 2
3) по завершению вычисления создается временная безымянная переменная, которая хранит результат
4) эта безымянная переменная инициализирует параметр функции move
5) move возвращает r-value ссылку
6) func возвращает r value ссылку, полученную как результат move

7) в main результат вызова func в контексте инициализации интерпритируется как r-value типа int
8) x связывается с этим r-value
C++
1
2
3
4
5
6
7
8
9
10
int&& func()
{
    int i(1);
    return std::move(i + 2);
}
 
int main()
{
    auto&& x = func();
}
Добавлено через 3 минуты
еще 1 вопрос, почему компиль выдает варнинг в этом коде
warning C4172: возвращение адреса локальной или временной переменной
C++
1
2
3
4
5
6
7
8
9
10
int&& func()
{
    int i(1);
    return i + 2; // ИЗМЕНЕНИЯ ПРОИЗОШЛИ ЗДЕСЬ
}
 
int main()
{
    auto&& x = func();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2016, 09:33     Ссылки на r-значения
Посмотрите здесь:

C++ Заменить все значения элементов матрицы нулями, значения которых меньше числа k
C++ Напишите программу, которая выдает запрос на ввод значения часов и значения минут.
operator= возврат значения и просто ссылки C++
C++ Возвращение ссылки на указатель использование её как левостороннего значения
Как лучше передавать значения в функцию? Ссылки vs указатели C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ferrari F1
Заблокирован
296 / 282 / 62
Регистрация: 27.01.2015
Сообщений: 1,901
Записей в блоге: 1
Завершенные тесты: 1
04.08.2016, 20:04  [ТС]     Ссылки на r-значения #21
HelicopterK52, Липпман
https://www.ozon.ru/context/detail/id/26348781/
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2016, 20:19     Ссылки на r-значения
Еще ссылки по теме:

Возвращение значения в функции, ссылки, вычислить корни квадратного уравнения C++
Вывести индексы тех элементов, значения которых больше значения предыдущего C++
C++ Найти элементы массива значения которых больше значения их индексов

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

Или воспользуйтесь поиском по форуму:
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
04.08.2016, 20:19     Ссылки на r-значения #22
Ferrari F1, http://thbecker.net/articles/rvalue_...ection_01.html
Если картина не прояснится, то бросай плюсы
Yandex
Объявления
04.08.2016, 20:19     Ссылки на r-значения
Ответ Создать тему
Опции темы

Текущее время: 14:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru