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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Ferrari F1
=^_^=
561 / 448 / 93
Регистрация: 27.01.2015
Сообщений: 2,621
Записей в блоге: 1
Завершенные тесты: 1
#1

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

04.08.2016, 09:33. Просмотров 510. Ответов 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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2016, 09:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ссылки на r-значения (C++):

operator= возврат значения и просто ссылки - C++
Здорова господа! Снова пытаюсь чуток в С++ разобраться, с перегрузкой операций, снова ничерта непонятно. от допустим класс class...

Возвращение ссылки на указатель использование её как левостороннего значения - C++
Есть шаблон: //------------------------------------------------------- template<class T> struct ts { private: void* data; ...

Как лучше передавать значения в функцию? Ссылки vs указатели - C++
Всем доброго времени суток. Уважаемые гуру, подскажите пожалуйста, как лучше передавать значения в функцию, через указатель или ссылку? И...

Возвращение значения в функции, ссылки, вычислить корни квадратного уравнения - C++
Определить функцию вычисления корней квадратного уравнения. Функция должна возвращать значение 1, если корни найдены, значение 0, если...

Главная функция (вводит некоторые значения и передает их и ссылки на некоторые переменные в функцию) - C++
Написать главную функцию, которая вводит некоторые значения и передает их и ссылки на некоторые переменные в функцию. Получив результаты...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
HelicopterK52
659 / 202 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
04.08.2016, 19:50 #16
Цитата Сообщение от DrOffset Посмотреть сообщение
но перемещения (в терминах С++11) не будет.
Если убрать rvo/nrvo, то будет перемещение,
т.к. имеем xvalue в данном месте,
а значит будет перемещение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//g++  4.9.3
 
#include <iostream>
 
 
 
struct Test
{
    Test() = default;
    Test(const Test&){std::cout << "Test::cctor" << std::endl;}
    Test(Test&&){std::cout << "Test::mctor" << std::endl;}
};
 
 
 
 
Test func2()
{
    Test v;
    return v; // будет перемещен
}
 
 
 
 
int main()
{
    func2();
}
http://rextester.com/BYDT55063

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

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Другое дело, что не всегда эффект будет сопровождаться фактичеким перемещением
Прочитал уже после. Теперь ясно что Вы имели ввиду

DrOffset
04.08.2016, 19:52
  #17

Не по теме:

Цитата Сообщение от HelicopterK52 Посмотреть сообщение
Если убрать rvo/nrvo, то будет перемещение,
т.к. имеем xvalue в данном месте,
Я ж сказал об этом ниже.

HelicopterK52
659 / 202 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
04.08.2016, 19:54 #18
Ferrari F1, что rvalue-reference, что lvalue-reference - это в первую очередь ссылка.
Возврат ссылки на локальную переменную сами знаете чем грозит. Не важно, какая именно это ссылка.
Фактически, rvalue-ссылка, это просто некая пометка что ресурсы объекта можно захапать себе, конечно, это я так по-простецки

Добавлено через 26 секунд

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Я ж сказал об этом ниже.
я ж сказал об этом ниже
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
Прочитал уже после.

Ferrari F1
=^_^=
561 / 448 / 93
Регистрация: 27.01.2015
Сообщений: 2,621
Записей в блоге: 1
Завершенные тесты: 1
04.08.2016, 19:56  [ТС] #19
HelicopterK52, просто автор книги, что я щас читаю, не очень понятно объясняет материал по ним.
Читаю - будто бутерброд жую, очень тяжело курится...
Не совсем еще понимаю, что вобще из себя представляет это "перемещение" в плане ее реализации, может попробуете объяснить?

Автор не объясняет четко, когда этими ссылками можно пользоваться, а когда нельзя... в отличие от л валуе референс
HelicopterK52
659 / 202 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
04.08.2016, 20:02 #20
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
просто автор книги
Что за книга? Что за автор?
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
может попробуете объяснить?
Думаю, попробовать можно, но надо будет подумать сначала.
Ferrari F1
=^_^=
561 / 448 / 93
Регистрация: 27.01.2015
Сообщений: 2,621
Записей в блоге: 1
Завершенные тесты: 1
04.08.2016, 20:04  [ТС] #21
HelicopterK52, Липпман
https://www.ozon.ru/context/detail/id/26348781/
ct0r
Игогошка!
1769 / 671 / 42
Регистрация: 19.08.2012
Сообщений: 1,284
Завершенные тесты: 1
04.08.2016, 20:19 #22
Ferrari F1, http://thbecker.net/articles/rvalue_...ection_01.html
Если картина не прояснится, то бросай плюсы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2016, 20:19
Привет! Вот еще темы с ответами:

Вычислить значения функции F на интервале от начального значения до конечного значения - C++
Написать консольное приложение на С++ Перепечатайте пожалуйста текст задания на форум.

Выбор значения из ссылки - Delphi
Доброго времени суток, форумчане! Прошу сильно не ругать, если мой вопрос покажется глупым, - я честно проштудировал много информации,...

Работа с потоками, выполняющими методы принимающими значения ссылки - C#
Ребята, как сделать так, чтобы можно было через делегат ParametrizedThreadStart можно было передавать параметр ссылку. Пример ...

Изменение ссылки(добавление/обновление значения из input), при помощи jquery - jQuery
Нужно при помощи jquery в конец ссылки добавлять значение, введенное в инпуте. Я сделал таким образом: HTML: &lt;input name=&quot;vvod&quot;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.08.2016, 20:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru