Название: Искусство программирования (задача 11) Отправлено: vimmax от Январь 17, 2008, 06:50:20 Верен ли код?
Код: (cpp) string f() { return "abc"; } Название: Re: Искусство программирования (задача 11) Отправлено: Sochin от Январь 17, 2008, 09:03:11 Как пишет дядя Саттер, код валидный. )
Название: Re: Искусство программирования (задача 11) Отправлено: LazarusLong от Январь 17, 2008, 10:07:58 vimmax, +1 за отличный вопрос!
Название: Re: Искусство программирования (задача 11) Отправлено: vimmax от Январь 18, 2008, 11:52:38 Sochin +1, раз ты сразу нашел Саттера, то придираться не буду :)
Создается ссылка на временный объект. Но тем не менее, с кодом все в порядке. Почему так? Потому что в С++ явно специфицировано, что если привязать временный объект к ссылке на const в стеке, то жизнь временного объекта будет продлена. Теперь он будет жить столько, сколько живет константная ссылка на него. В приведенном примере все валидно, время жизни s заканчивается с закрывающей фигурной скобкой. Код: (cpp) string f() { return "abc"; } невалидный код, наличие const'а тут важно. Правильный компилятор выдаст ошибку на этапе компиляции. комменты к статье на русском Герба Саттера (http://alenacpp.blogspot.com/2008/01/const.html) статья Герба Саттера об использовании const (eng) (http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!378.entry) |