Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.04.2016, 17:23   #51
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
что такое rvalue reference.
Очевидно же - ссылка на rvalue.
Цитата:
правая и левая ссылка чоль.
rvalue и lvalue - просто исторически сложившиеся названия.
В современном C++ rvalue и lvalue не имеют ничего общего с "cправf"/"слева".
К тому же есть prvalue, glvalue, xvalue...

В стандарте языка дана такая схема категорий выражений:
Снимок-42.png

Последний раз редактировалось Croessmah; 13.04.2016 в 17:28.
Croessmah вне форума
Старый 13.04.2016, 17:24   #52
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Чтобы различать эти два типа, мы будем называть традиционную C++ ссылку lvalue ссылка.

????? это как понимать
RAFA91 вне форума
Старый 13.04.2016, 17:30   #53
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так и понимать.

Читать так и не научились?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума
Старый 13.04.2016, 17:34   #54
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

смысл иметь ссылку на временный обьект ?

ссылки должны на что-то указывать.

их нельзя связывать с другими обьектами.
Код:
A&  a_ref3 = A();  // Ошибка!
A&& a_ref4 = A();  // Ok
RAFA91 вне форума
Старый 13.04.2016, 17:38   #55
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
это как понимать
& - lvalue-reference
&& - rvalue-reference

lvalue - фактически, это именованные объекты, а также выражения, результатами которого является lvalue-reference.

xvalue - ссылаются на объекты, которые вот-вот умрут (например, после выхода из функций), так же выражения с rvalue-reference являются xvalue.

glvalue - включает в себя xvalue и lvalue

rvalue - включает в себя xvalue, временные объекты, а также всё то, что не ассоциировано с объектами.

prvalue - это выражения, которые rvalue, но не могут быть xvalue (например, литералы).


Вот как-то так.

Цитата:
A& a_ref3 = A(); // Ошибка!
потому что A() создаст временный объект.
Его нельзя связать с ссылкой на lvalue.
Но если добавить const, то можно:
Код:
const A&  a_ref3 = A();  // Ок!
Цитата:
A&& a_ref4 = A(); // Ok
Да, как раз для этого оно вполне подходит.
До C++11 создать не константную ссылку
на временный объект было нельзя (ну, это я упростил несколько).

Последний раз редактировалось Alex11223; 13.04.2016 в 17:51.
Croessmah вне форума
Старый 13.04.2016, 17:45   #56
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

зачем создавать ссылку на временный обьект ?

и так уже наелись недействительными ссылками.

как только временный обьект уничтожится , на что будет эта ссылка ссылаться ?
RAFA91 вне форума
Старый 13.04.2016, 17:49   #57
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
и так уже наелись недействительными ссылками.
В каком месте?
Цитата:
как только временный объект уничтожится , на что будет эта ссылка ссылаться ?
Временные объекты, связанные с ссылками не уничтожаются сразу.
Их время жизни продлевается до тех пор, пока не умрет ссылка:
Код:
{
   const A& r = A();//Время жизни объекта продлиться пока не умрет r
   //какие-то операции с r
}//r здесь умрет => здесь умрет временный объект
Цитата:
зачем создавать ссылку на временный обьект ?
Например, при отсутствии copy elision
Код:
A a1;
A a2;
A a3 = a1*a2;//Результат умножения копируется в a3, потом уничтожается
const A& a4 = a1*a2;//Результат умножения привязывается к ссылке и уничтожится только вместе с ней(нет копирования объекта, заметьте)
Ну или еще пример - для передачи в функцию:
Код:
void foo(const A& obj)
{
}
//...
A a1;
A a2;
foo(a1+a2);//Временный объект будет передан "по константной ссылке"
Вот когда поймете это, тогда можно обсудить зачем нужны rvalue-reference.
Иначе это пустая трата времени.
Показать пользу rvalue-reference можно только в сравнении с lvalue-reference,
но для этого необходимо хорошо понимать что такое lvalue-reference и с чем его едят.



Лан, пойду я на работу с рабочими работу работать в рабочее время

Последний раз редактировалось Croessmah; 13.04.2016 в 18:05.
Croessmah вне форума
Старый 14.04.2016, 11:39   #58
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
В каком месте?
Код:
int *x = new int(10);

int &y = *x;

delete x;
на что теперь ссылаться y
RAFA91 вне форума
Старый 14.04.2016, 12:42   #59
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А еще можно так
Код:
int *x = nullptr;

std::cout << *x;
p51x на форуме
Старый 14.04.2016, 12:46   #60
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

зачем троллить этой не нужной информацией?


повторюсь

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
Код:
int *x = new int(10);

int &y = *x;

delete x;
на что теперь ссылаться y
RAFA91 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработчик перемещения mitiay Общие вопросы Delphi 1 11.05.2015 20:50
Отслеживание перемещения picturebox Aleksa91 C# (си шарп) 7 15.06.2014 14:55
Планирование перемещения squid90 Фриланс 3 27.12.2011 21:48
Тормоза перемещения по DBGrid artemavd БД в Delphi 17 12.10.2010 17:52
С++ (конструктор, деструктор, копирующий конструктор) Jane-sad Помощь студентам 2 01.10.2010 10:01