Thu, 26 May 2005 19:29:53 +0400 Alex Mogilnikov wrote to Dimmy Timchenko:
[...]DT>> Видишь, здесь ты применил правило именования, а в критикуемом случае - DT>> нет. :)
AM> :) Даже *x++ уже дает возможность понять, что x - это указатель.
Если операторы не перегружены. А если перегружены? Надо все смотреть - и что такое "х", и что за операторы.
AM>>> и f(&var) гораздо нагляднее...
DT>> Видимо, кто к чему привык.
AM> А как узнать, изменится ли var после вызова f(var)? Hадо прыгнуть к AM> прототипу f и посмотреть, не является ли ее аргумент ссылкой, и если AM> является то есть ли там const. И если нет, действительно ли ее меняют, или AM> этот const просто забыли (как часто и бывает). :)
Да, в С++ все намного сложнее, вариантов гораздо больше, больше гибкости и мощи - больше и ответственности, это естественно.
Что касается ссылок указателей. Когда надо "работать с адресом объекта", т.е. когда прямое копирование накладно, почти во всех случаях, когда не требуется адресная арифметика, ссылки предпочтительнее. Они имеют более простой и понятный синтаксис при использовании, они не порождают ошибок, связанных с инициализацией (неинициализированные указатели - источник множества подлых глюков) - попробуй создать неинициализированную ссылку. А в ряде случаев - таких как перегрузка операторов, без ссылок вообще не обойтись.
Т.ч. зря ты на них наехал. В реальности проблем они не порождают. А когда копаешься в коде (особенно в чужом), всегда нужно все смотреть. Хороший редактор - с приличными средствами навигации по проекту - очень тут помогает: прыгнуть к определению и обратно - пара секунд, делается нажатием соответствующих хоткеев. Да хоть по всей цепочке определений и обратно.