| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > время жизни временного объекта |
| Автор: Alek86 21.12.2007, 16:51 | ||
| вопрос из разряда заковыристых по стандарту (и, наверное, уже не раз подымался, но я не знаю, как его искать...) код
будет ли по стандарту в функциях func2 и func1 нормальный объект, а не мусор? |
| Автор: Fazil6 21.12.2007, 17:14 |
да. Функция func1() возвращает объект, время жизни которого составляет время выполнения функции func2 а const влияет только на то, что вызов функции func3 невозможен для не l-value аргументов и в данном случае значения не имеет |
| Автор: bel_nikita 21.12.2007, 17:16 |
| все в норме, при условии что в С1 определен конструктор копий C1 func1() {return C1();} // возвращает объект |
| Автор: Alek86 21.12.2007, 17:24 |
| спасибо |
| Автор: zkv 21.12.2007, 17:34 | ||
| Пользуясь случаем, вопрос по временным объектам. Я считал, что такой код некорректен:
а тут как-то задумался и засомневался, разрешите плиз, код выше корректен, или нет? |
| Автор: Alek86 21.12.2007, 17:38 |
| думаю, код некорректен, хотя для маленьких строк он будет работать (так как часто c_str() возвращает указатель на внут. данные) |
| Автор: bel_nikita 21.12.2007, 17:54 | ||
открой стандарт, почитай |
| Автор: zkv 21.12.2007, 17:56 |
спасибо, читал, но сомнения остались. |
| Автор: HappyLife 21.12.2007, 17:59 | ||
zkv, c точки зрения Страуструпа, главы 20 пункта 2 подпункта 7
Получается что код полностью корректен. |
| Автор: zkv 21.12.2007, 19:57 | ||||
да, откопал в стандарте (правда, насколько я понял, это рекомендация):
HappyLife, спасибо за наводку |
| Автор: Ulysses4j 24.12.2007, 21:25 |
| Я бы еще на всякий случай отметил, что к неконстантным функциям относится деструктор — то есть указатель перестанет быть действительным после окончания блока, в котором создавался соответствующий string. |