| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > передача вршменного объекта по некостантной ссылке |
| Автор: mes 29.5.2009, 21:15 | ||
| тема возникла в результате обсуждения этой : http://forum.vingrad.ru/forum/topic-261305/anchor-entry1882413/15.html#st_0_view_0 компилирует ли VS
|
| Автор: zim22 29.5.2009, 21:26 | ||||
error C2664: 'f2' : cannot convert parameter 1 from 'A (__cdecl *)(void)' to 'A &' всё остальное компилируется. если заменить на
то это тоже компилируется |
| Автор: azesmcar 29.5.2009, 21:29 | ||||
Добавлено @ 21:29 mes Учитывая то, что вероятно должно было быть написано так
обе строки компилируются товарищи, кто нибудь скиньте ссылку на разблокированнный стандарт..я замучаюсь вручную набирать (там же копирование заблокировано) |
| Автор: mes 29.5.2009, 21:33 |
да, там опечатка |
| Автор: mes 29.5.2009, 21:55 | ||
такой пойдет ? http://ftp.csci.csusb.edu/dick/c++std/cd2/ Добавлено через 2 минуты и 21 секунду ну раз все компилирует, может и такое проглотит :
|
| Автор: azesmcar 29.5.2009, 22:02 | ||||
и такой эксперимент
компилируется, запускается.. из чего вывод, живет он дольше чем ему разрешает стандарт. Добавлено через 1 минуту и 39 секунд Да Да |
| Автор: azesmcar 29.5.2009, 22:11 | ||||
Абсолютно, но к сожалению непереносимым код делает далеко не только несоответствие стандарту. Помнится в книге More Exceptional C++ Саттер писал о конструкции C++ целиком и полностью соответствующей стандарту, но компиляторов которые этот код проглотили оказалось меньшинство. Селяви Добавлено @ 22:12 И в конце концов не будем забывать про
Добавлено через 4 минуты и 25 секунд mes,
А это мы сейчас проверим. |
| Автор: mes 29.5.2009, 22:18 | ||||
да.. переносимость тут не при чем. Я имел ввиду под этим высказыванием немножко другое... Что то типа этого : VS даже на таких элементарных примерах, позволяет писать ill-formed код, приучая к неправильным действиям. т.е смысловой является последняя часть высказывания :
|
| Автор: azesmcar 29.5.2009, 22:18 | ||
деструктор вызывается после завершения функции f2. Он удлиняет его жизнь. |
| Автор: mes 29.5.2009, 22:20 | ||
в данном конкретном случае.. но нет гарантии что всегда |
| Автор: azesmcar 29.5.2009, 22:22 | ||||||||
Таких примеров полно
вот как описан класс exception в стандарте. И все же
работает. Потому новичкам по моему лучше советовать писать на gcc. Добавлено через 1 минуту и 21 секунду Даже если всегда - это не смягчает вину Добавлено через 9 минут и 36 секунд А это вообще интересно
|
| Автор: GoldFinch 29.5.2009, 22:36 | ||
вроде как передача манипулятора c параметрами в поток выглядит именно как
|
| Автор: mes 29.5.2009, 22:45 |
| GoldFinch, сорри, не уловил мысли, это вопрос или высказывание для продолжения дискуссии ? Добавлено через 2 минуты и 33 секунды как я понял, то студия для Т& старается обеспечивать требования уставляемые стандартом для Т const& по отношению к временному объекту. |
| Автор: azesmcar 29.5.2009, 22:52 |
| mes Ну с указателями он вроде себя правильно ведет..а с ссылками похоже на то. |
| Автор: mes 29.5.2009, 23:06 | ||
если бы она еще умудрялась бы под указатели удлинять жизнь, то тогда и сборщик мусора не нужен был бы |
| Автор: azesmcar 29.5.2009, 23:10 | ||||
редактировал, в этот момент интернет отключили
хотел дописать а вот с ссылками похоже на то. A& p = f1(); в студии ведет себя также как const A& p = f1(); только неконстантный.
еще бы подсчет ссылок туда |