то, что ф-ия strcat() выглядит необычно — это не столь важно, возможно это такое сокращение, но вовзрат ссылки return newStr; ввел меня в сомение, т.к. считал, что этого делать нельзя?! Это не единственный пример в книге с возвратом ссылки на внутреннюю перменную, не мог же он столько раз "ошибиться"?
Здравствуйте, overt, Вы писали:
O>Начал читать Джеффа Элджера "С++", дошел до перегрузок и запутался в понятиях. Там есть такой пример, цитирую:
Не надо читать Джеффа Элджера.
Здравствуйте, overt, Вы писали:
O>...не мог же он столько раз "ошибиться"?
1) Как видишь, смог
2) Ты возьми и проверь как такой код работает
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, overt, Вы писали:
O>>Начал читать Джеффа Элджера "С++", дошел до перегрузок и запутался в понятиях. Там есть такой пример, цитирую: J>Не надо читать Джеффа Элджера.
Здравствуйте, alzt, Вы писали:
A>Здравствуйте, jazzer, Вы писали:
J>>Здравствуйте, overt, Вы писали:
O>>>Начал читать Джеффа Элджера "С++", дошел до перегрузок и запутался в понятиях. Там есть такой пример, цитирую: J>>Не надо читать Джеффа Элджера.
A>А почему?
Потому что если это та книжка, о которой я думаю, то она очень старая, еще достандартая, года так 95-го.
Поэтому она просто-напросто устарела и учить по ней С++ точно не надо.
Там он обсуждает несколько интересных идей, но это можно читать только опытному программисту, хорошо знающему современный С++ и способному увидеть за деревьями ошибок и кривизны интересную идею. Малоопытный же программист просто запутается в ошибках, которыми полна книга, и в том, как предлагается все реализовывать.
Ну и язык отстойный — очень плохо у него получается излагать свои идеи, приходится продираться через текст, временами догадываясь, что же, собственно, он хотел сказать.
Однозначно не рекомендую для начинающих изучать — есть книги, гораздо более приближенные к современному реальному С++ и гораздо лучше написанные.
Здравствуйте, jazzer, Вы писали:
O>>>>Начал читать Джеффа Элджера "С++", дошел до перегрузок и запутался в понятиях. Там есть такой пример, цитирую: J>>>Не надо читать Джеффа Элджера.
A>>А почему?
J>Потому что если это та книжка, о которой я думаю, то она очень старая, еще достандартая, года так 95-го. J>Поэтому она просто-напросто устарела и учить по ней С++ точно не надо.
Книга старая. Сейчас понятно устарела, редакция требуется. Зато пишет интересно.
J>Однозначно не рекомендую для начинающих изучать — есть книги, гораздо более приближенные к современному реальному С++ и гораздо лучше написанные.
Начинающие изучать вряд ли её читать будут, а кто поопытнее — не будет копировать вслепую.
Здравствуйте, alzt, Вы писали:
A>Здравствуйте, jazzer, Вы писали:
O>>>>>Начал читать Джеффа Элджера "С++", дошел до перегрузок и запутался в понятиях. Там есть такой пример, цитирую:
A>Начинающие изучать вряд ли её читать будут, а кто поопытнее — не будет копировать вслепую.
Имхо, если человек пишет: "дошел до перегрузок и запутался в понятиях" — это как раз начинающий программист
O>то, что ф-ия strcat() выглядит необычно — это не столь важно, возможно это такое сокращение, но вовзрат ссылки return newStr; ввел меня в сомение, т.к. считал, что этого делать нельзя?! Это не единственный пример в книге с возвратом ссылки на внутреннюю перменную, не мог же он столько раз "ошибиться"?
Непонятно, где ты это нашел. У меня есть и оригинальная книжка и перевод на русский издания 1999-го года. Сейчас проверил в обоих. Везде возврат по-значению.
Здравствуйте, alexeiz, Вы писали:
A>Непонятно, где ты это нашел. У меня есть и оригинальная книжка и перевод на русский издания 1999-го года. Сейчас проверил в обоих. Везде возврат по-значению.
Год выпуска книги не известен, книга в pdf без титульных листов.
Здравствуйте, overt, Вы писали:
O>Здравствуйте, alexeiz, Вы писали:
A>>Непонятно, где ты это нашел. У меня есть и оригинальная книжка и перевод на русский издания 1999-го года. Сейчас проверил в обоих. Везде возврат по-значению.
O>Год выпуска книги не известен, книга в pdf без титульных листов.
У меня и pdf оказывается есть. И там действительно косяк. Вывод: купи нормальную книжку.
Ого, в одном кусочке кода столько ошибок, да еще и в книжке!
1. delete вместо delete[]
2. Несуществующая функция strcat (в таком виде, как она представлена)
3. Возвращение ссылки на локальную переменную
4. Утечка памяти в случае исключения
5. (придирка)Зачем-то создаётся промежуточный буфер, вместо того, чтоб копировать продстрочки прямо в результат нужного размера.
"To protect people you must slay people. To let people live you must let people die. This is the true teaching of the sword."
-Seijuro Hiko, "Rurouni Kensin"
Re: возврат ссылки на локальную переменную
От:
Аноним
Дата:
26.08.09 14:21
Оценка:
Здравствуйте, overt, Вы писали:
O>Начал читать Джеффа Элджера "С++", дошел до перегрузок и запутался в понятиях. Там есть такой пример, цитирую:
O>
O>Перегрузка операторов в форме внешних функций
O>Чтобы перегрузить оператор в форме внешней функции, необходимо определить глобальную
O>функцию.
O>то, что ф-ия strcat() выглядит необычно — это не столь важно, возможно это такое сокращение, но вовзрат ссылки return newStr; ввел меня в сомение, т.к. считал, что этого делать нельзя?! Это не единственный пример в книге с возвратом ссылки на внутреннюю перменную, не мог же он столько раз "ошибиться"?
При каждом вызове функции создаются новые копии аргументов и локальных(автоматических) переменных. Память может повторно использоваться после
возврата из функции, поэтому, указатель на локадьную переменную возвращать не следует. Значение, на кторое он указывает, будет менятся непредсказуемо.(Страусттруп "Язык программирования С++")
Здравствуйте, alzt, Вы писали:
A>Здравствуйте, jazzer, Вы писали:
J>>Здравствуйте, overt, Вы писали:
O>>>Начал читать Джеффа Элджера "С++", дошел до перегрузок и запутался в понятиях. Там есть такой пример, цитирую: J>>Не надо читать Джеффа Элджера.
A>А почему?
В наши дни эта книга во многом сборник вредных советов, по-моему. И ошибок там полно. Вон и автор топика столкнулся с этой мурой.
А сколько тут было разговоров по поводу мощных историй элджера о том, что хороший современный компилятор в целях оптимизации выкидывает конструкторы int и т.п. ереси.
Of course, the code must be complete enough to compile and link.