| temporary object: А почему так не работает? | |
| От: | Аноним 378 | ||
| Дата: | 24.05.08 13:52 |
почему так не работает?
ну получит f ссылку на временный объект, что в этом страшного? |
| Re: temporary object: А почему так не работает? | |
| От: | Erop | ||
| Дата: | 24.05.08 13:59 |
| Здравствуйте, Аноним, Вы писали: А>ну получит f ссылку на временный объект, А>что в этом страшного? По стандарту. неконстантная ссылка -- это всегда lvalue. Ещё и указатель на этот временный объект получить прямо нельзя. В новом стандарте будут ещё и rvalue ссылки, там можно будет написать такой код... Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском |
| Re: temporary object: А почему так не работает? | |
| От: | Roman Odaisky | ||
| Дата: | 24.05.08 14:27 | ||
| Оценка: | 2 (1) | ||
| Здравствуйте, Аноним, Вы писали: А>ну получит f ссылку на временный объект, А>что в этом страшного? Это запрещено, чтобы избежать вот таких проблем:
status=sent (delivered to file: /dev/null) |
| Re: temporary object: А почему так не работает? | |
| От: | Sashaka | ||
| Дата: | 24.05.08 21:46 |
| Здравствуйте, Аноним, Вы писали: А>почему так не работает? А>
А>ну получит f ссылку на временный объект, А>что в этом страшного? объясните дураку почему так не работает, потому что у меня работает. |
| Re[2]: temporary object: А почему так не работает? | |
| От: | Erop | ||
| Дата: | 24.05.08 22:32 |
| Здравствуйте, Sashaka, Вы писали: S>объясните дураку почему так не работает, потому что у меня работает. А так?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском |
| Re[2]: temporary object: А почему так не работает? | |
| От: | VoidEx | ||
| Дата: | 25.05.08 00:46 |
| Здравствуйте, Sashaka, Вы писали: S>объясните дураку почему так не работает, потому что у меня работает. Потому что MSVC |
| Re[3]: temporary object: А почему так не работает? | |
| От: | Sashaka | ||
| Дата: | 25.05.08 04:49 |
| Здравствуйте, Erop, Вы писали: E>Здравствуйте, Sashaka, Вы писали: S>>объясните дураку почему так не работает, потому что у меня работает. E>А так?
так не работает =) кстати не работает если Foo в исходном примере заменить на int, например, видимо MSVC :no: . |
| Re[2]: temporary object: А почему так не работает? | |
| От: | Sergey Chadov | ||
| Дата: | 25.05.08 09:07 |
| Здравствуйте, Sashaka, Вы писали: S>объясните дураку почему так не работает, потому что у меня работает. /Za ? или хотя бы /W4 -- Sergey Chadov ... << RSDN@Home 1.2.0 alpha rev. 685>> |
| Re: temporary object: А почему так не работает? | |
| От: | Maxim S. Shatskih mvp | ||
| Дата: | 25.05.08 16:12 |
| А>ну получит f ссылку на временный объект, А>что в этом страшного? Получит ссылку, положит в какой-нить контейнер, а объект потом разрушится. Занимайтесь LoveCraftом, а не WarCraftом! |
| Re[2]: temporary object: А почему так не работает? | |
| От: | Erop | ||
| Дата: | 25.05.08 16:25 |
| Здравствуйте, Maxim S. Shatskih, Вы писали: MSS>Получит ссылку, положит в какой-нить контейнер, а объект потом разрушится. А если ему автоматический объект подсунут? Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском |
| Re[3]: temporary object: А почему так не работает? | |
| От: | Maxim S. Shatskih mvp | ||
| Дата: | 26.05.08 00:08 |
| MSS>>Получит ссылку, положит в какой-нить контейнер, а объект потом разрушится. E>А если ему автоматический объект подсунут? Гимор со временными объектами я проходил еще в 1993 году. Сейчас, после 15 лет опыта, я буду избегать любого кода, который может создать такой вот гимор. Временные объекты как правило есть зло, особенно злоупотребление ссылками в том контексте, где бывают временные объекты. Занимайтесь LoveCraftом, а не WarCraftом! |
| Re[4]: temporary object: А почему так не работает? | |
| От: | Erop | ||
| Дата: | 26.05.08 04:08 |
| Здравствуйте, Maxim S. Shatskih, Вы писали: MSS>Гимор со временными объектами я проходил еще в 1993 году. Сейчас, после 15 лет опыта, я буду избегать любого кода, который может создать такой вот гимор. Временные объекты как правило есть зло, особенно злоупотребление ссылками в том контексте, где бывают временные объекты. IMHO, это говорит о том, что нехорошо запоминать указатели на переданные по ссылкам объекты. От константности ссылки это, IMHO, не зависит. Но реальным ключом к отсутствию гемора такого рода является вовсе и не формальные правила про ссылки и указатели, продуманная схема владения объектами в программе. Из кода всегда должно быть легко понять кто кем владеет и почему тот или иной объект не умрёт раньше времени... Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском |
| Re: temporary object: А почему так не работает? | |
| От: | Vamp | ||
| Дата: | 27.05.08 15:36 |
Тут сверху все правильно объяснили. А вот так надо сделать, чтобы работало:
Да здравствует мыло душистое и веревка пушистая. |
| Re[5]: temporary object: А почему так не работает? | |
| От: | Maxim S. Shatskih mvp | ||
| Дата: | 27.05.08 22:44 |
| E>IMHO, это говорит о том, что нехорошо запоминать указатели на переданные по ссылкам объекты. От константности ссылки это, IMHO, не зависит. Нехорошо брать адрес объекта, который может оказаться временным. Т.е. в том контексте, в котором пользуются временные объекты, лучше вообще не пользоваться ни ссылками, ни указателями. Это разные парадигмы. Работа с объектом _только через указатели_ — это парадигма ОО классики типа Смоллтока, Явы, Шарпа Временные же объекты не имеют к этой парадигме отношения, зато имеют к передаче объектов _по значению_ везде. Это не ОО, это ADT — абстрактные типы данных. Сюда же и ссылки, которые предназначены главным образом для параметров и возвращаемых значений, и не имеют практически никакой ценности вне этого, являясь недоуказателями. Это все ADT. И функции operator тоже ADT. Вторая парадигма языка, к ОО не относится. Да, Си++ мультипарадигмальный язык, темплейты вдобавок еще и третья парадигма. Чтобы не было гимора, надо чувствовать, в какой парадигме пишешь. Занимайтесь LoveCraftом, а не WarCraftом! |
| Re[2]: temporary object: А почему так не работает? | |
| От: | alexsy | ||
| Дата: | 28.05.08 08:48 |
| Здравствуйте, Erop, Вы писали: E>Здравствуйте, Аноним, Вы писали: А>>ну получит f ссылку на временный объект, А>>что в этом страшного? E>По стандарту. неконстантная ссылка -- это всегда lvalue. Ещё и указатель на этот временный объект получить прямо нельзя. E>В новом стандарте будут ещё и rvalue ссылки, там можно будет написать такой код... А на lvalue получить указатель или ссылку нельзя !! по тому что это регистор процессора EAX или если по Жизни везёт то RAX.. или какой другой в зависимости от архитектуры |
| Re[3]: temporary object: А почему так не работает? | |
| От: | Erop | ||
| Дата: | 28.05.08 08:58 |
| Здравствуйте, alexsy, Вы писали: A>А на lvalue получить указатель или ссылку нельзя !! по тому что это регистор процессора EAX или если по Жизни везёт то RAX.. A>или какой другой в зависимости от архитектуры Ну и что? Читай про && Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском |