| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Игра в С++ |
| Автор: Fazil6 13.7.2007, 19:01 | ||
имеем код
Как Вы думаете, что выведется на экран? Кто что вообще думает о том, что тут написано? |
| Автор: archimed7592 13.7.2007, 19:11 |
UB, ибо временный объект сконструированный из сторки "rrrr..." уничтожится(может уничтожиться) в конце sequence point. Т.е до вызова второго CheckMaximum. Думаю, что не хватает комментария к ф-ции, что "несмотря на то, что аргументы представляют из себя константные ссылки, эти ссылки могут быть использованны вне ф-ции(после её завершения), т.о. не рекомендуется вызывать ф-цию с аргументами, ссылающимися на временные объекты". |
| Автор: bsa 13.7.2007, 19:17 |
| эх... если бы я знал, когда уничтожается временный объект, то ответил точно... А так есть подозрение, что может сегфолт вывалится при втором сравнении. |
| Автор: archimed7592 13.7.2007, 19:48 | ||||
Точно. Не может, а именно должен удалится в конце выражения.
|
| Автор: Doc_d0s 15.7.2007, 21:30 |
| думаю стоит сделать копирование длинной строки в функции... |
| Автор: archimed7592 15.7.2007, 22:00 |
| Doc_d0s, в вышеозвученном примере одного изменения недостаточно будет. Нужно либо изменить тип возвращаемого значения(убрать ссылку, дабы копировалось) и изменить "клиентский" код, чтобы сохранялась не ссылка, а полностью значение. Для ref-counted строк overhead'а по идее не будет. |