![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Hassel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.1.2011 Где: Москва Репутация: нет Всего: нет |
Недавно прочитал, что можно создавать константные ссылки на временные объекты,
К примеру:
Вопрос в следующем: а почему только константные ссылки? Почему нельзя создавать неконстантные ссылки? |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
можно. создавай ![]() Добавлено @ 11:12 почитай http://alenacpp.blogspot.com/2005/11/sequence-points.html Это сообщение отредактировал(а) baldina - 11.7.2011, 11:12 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
Hassel |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.1.2011 Где: Москва Репутация: нет Всего: нет |
Должно быть модифицировано значение "временного" объекта. Он ведь по-сути уже перестал быть временным. Везде четко написано - время жизни такого объекта совпадает с временем жизни ссылки (за исключением случая с аргументом конструктора). Т.е. я могу относиться к такому временному объекту, как к локальной переменной, объявленной в той же области видимости, что и ссылка.
Честно дочитал до конца, но не очень понял. Я все-таки не понимаю, раз объект перестал быть временным, почему его значение нельзя изменять? Чем вызвано это ограничение? |
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
там про временные объекты и их время жизни. ладно, не суть там же есть еще обсуждение константных ссылок http://alenacpp.blogspot.com/2008/01/const.html вопрос "почему" более тонкий; в большинстве случаев можно обойтись просто переменной, не ссылкой. однако рассматривая код
и принимая во внимание, что ссылка - синоним объекта, согласитесь, здесь возможность изменения была бы нелогичной (хотя технически возможно, используя const_cast) |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ссылка - lvalue , если ей без проблем можно присваивать rvalue, то само понятие rvalue становится лишним...
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
да, но почему временный объект обязательно rvalue? никаких серьезных причин этому ограничению я не вижу
|
|||
|
||||
Hassel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.1.2011 Где: Москва Репутация: нет Всего: нет |
Я думаю, что правильный ответ - временный объект по своему назначению относится именно к rvalue. Он для того и создается, чтобы быть rvalue. Судя по всему, что обсуждалось выше, саму возможность получения ссылки на такой объект нужно рассматривать как некоторое отклонение от концепции "временности" .
Это сообщение отредактировал(а) Hassel - 11.7.2011, 16:02 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
думаю тут есть две разные ситуации.
вобщем про костыли поддерживаю) Добавлено через 2 минуты и 7 секунд с другой стороны, ссылка есть не что иное, как средство оптимизации. так что семантику ссылки не расширяют, обойтись без них можно, а во многих случаях компилятор сам разберется как лучше сделать |
|||
|
||||
Hassel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.1.2011 Где: Москва Репутация: нет Всего: нет |
Вот, кстати, тот-же самый вопрос и очень подробно http://stackoverflow.com/questions/1565600...emporary-object.
Позволю себе немного процитировать:
Это сообщение отредактировал(а) Hassel - 11.7.2011, 16:12 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
не обязательно ![]() само понятие временный объект в данном аспекте вторично.. ![]() Добавлено через 2 минуты и 47 секунд ну студия сделала и этим перевела широкий ряд легко диагностируемых компитором ошибок в разряд трудноуловливаемых программистом багов.. ![]() Добавлено через 4 минуты и 57 секунд а то что const int - lvalue не сильно смущает ? |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
с чего это оно lvalue? или это из разряда "если бы"? ссылки дань оптимизации (повторяюсь?) в виде синтаксического сахара. только он мог бы быть и послаще))) впрочем от языка с такой историей и идеологией трудно ожидать революций, так что - и так хорошо))) |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
а там const int , sorry я проассоциировал вторую часть цитаты на первую и речь вел о const int&, а она всегда lvalue.. но тогда еще раз вернемся к цитате..
как связано const в цитате и rvalue ?! Это сообщение отредактировал(а) mes - 12.7.2011, 12:12 |
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
я неявно имел в виду non-modifiable lvalues. lvalue в смысле 'объект с адресом' или 'слева от =' не так интересно. тут интересна операция присваивания, а не инициализации.
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
sorry, не могу связать предыдущие посты с Вашим последним... видать я что то упустил или смотрю не под тем углом.. Это сообщение отредактировал(а) mes - 12.7.2011, 15:06 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
это я был неточен
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |