> Так что не путайте ссылки и указатели. Это совсем разные вещи.Для процессора это абсолютно одинаковые вещи. Разница существует только на уровне синтаксиса языка, и только потому, что Страусструп придумал этот костыль и решил, что наряду с универсальным указателем он будет жутко удобным.
Удобство я вижу только одно: нужно писать '.' вместо '->' :) Но, как всегда в С++, одно небольшое удобство оборачивается бОльшим геморроем. Во-первых, как вы сами упомянули, при передаче по ссылке может неявно вызываться конструктор передаваемого объекта. Это делает код менее предсказуемым и программист должен всегда об этом помнить. Во-вторых, объект, передаваемый по ссылке, должен всегда существовать, даже если он мне не нужен. Например:
int my_write(const void * data, size_t bytes_to_write, size_t * bytes_written) {
// ...
if (bytes_written)
bytes_written = count;
}
// ...
my_write(my_data, n, 0); // мне не интересно знать, сколько байтов было записано
В С++ со ссылками такой номер не пройдет: если bytes_written - ссылка, хочешь - не хочешь, нужно заводить переменную и передавать ее в функцию.