![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
rp80 |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ссылку нельзя инициализировать rvalue. Поэтому нельзя делать вот так:
Но почему-то разрешается делать вот так
(prn - функция-шаблон, обертка для cout) Но в результате работы возникают странные глюки.
И, как ни странно, не работает и такой вроде бы "нормальный" вариант.
Хотелось бы понять почему во-первых проходит такая инициализация, а во-вторых почему ссылка "портится" после присваивания или конструктора копирования. Савсибо Сообщение отредактировал rp80 - 26.12.2011, 22:56 |
|
|
ilyabvt |
![]()
Сообщение
#2
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: ![]() ![]() ![]() |
Но почему-то разрешается делать вот так
Потому что вы инициализируете ссылку адресом переменной (ведь при вызове конструктора будет создавать переменная "n" с тем значением которое мы передадим в конструктор). Проблема в том что переменная то потом уничтожается, а ссылка будет по прежнему ссылаться на нее. И, как ни странно, не работает и такой вроде бы "нормальный" вариант.
Ничего странного, ссылка будет также указывать на переменную 'n' вашего конструктора, а вовсе не на "yy". Цитата Хотелось бы понять почему во-первых проходит такая инициализация, а во-вторых почему ссылка "портится" после присваивания или конструктора копирования. Где-то проходит где-то нет, билдеровский компилятор, например, послал меня и не захотел такое компилировать. А испортиться она может вообще в любой момент. То что "a.print()" выводил то что нужно это не более чем везение. Сообщение отредактировал ilyabvt - 27.12.2011, 2:51 |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 20.4.2025, 8:47 |