Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ При инициализации массива в отладке не попадаю в обработчик, поясните почему? http://www.cyberforum.ru/cpp-beginners/thread1789462.html
имеется два класса struct Integer { explicit Integer(int const &value) : value_(value) { } Integer() :value_(0)
C++ Простейший калькулятор Всем привет :) Это одна из самых первых моим программ в C++. Решил попробовать простейший калькулятор сделать с 4 функциями. Почему-то программа ругается на переменную "c", хотя вроде как под... http://www.cyberforum.ru/cpp-beginners/thread1789442.html
C++ Getch - что не так делаю?
Всем привет. Не могу понять почему не выполняется getch() после верного ввода пункта. int name ::menu() { cout << "Выберите действие: " << endl; cout << " 1. Запись данных в файл " << endl;...
Смещение курсора по консоли C++
Всем привет! Я работаю в программе dev c++. И мне нужна помощь,чтобы определенный символ я смог переместить в любое место консоли стрелочками. Буду благодарен за сайт, где это объясняется, и не...
C++ Найти минимум в массиве используя наиболее оптимальный алгоритм http://www.cyberforum.ru/cpp-beginners/thread1789415.html
Дан массив чисел, надо найти минимум. Препод сказал - дополнительное задание: предложить наиболее оптимальный алгоритм, написать код, реализующий его идею, и обосновать его теоретически.
C++ Как передать указатель на файл в функцию? Здравствуй по ходу написания программы столкнулся с вопросом как передать указатель на тип файл в функцию. напишите код. Спасибо подробнее

Показать сообщение отдельно
Ferrari F1
619 / 513 / 101
Регистрация: 27.01.2015
Сообщений: 2,985
Записей в блоге: 1
Завершенные тесты: 1

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

04.08.2016, 09:33. Просмотров 541. Ответов 21
Метки (Все метки)

Дарова!
Знакомлюсь с 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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru