Указатели и ссылки различаются синтаксически и обычно идентичны во время выполнения и генерации кода. Что касается старых компиляторов ... Я знал одну ошибку в DOS-компиляторе Borland 3 C ++: он кэшировал значение int (передаваемое по ссылке) в регистр, изменял его и не изменял исходное значение в памяти. При передаче по указателю эквивалентный код работал как ожидалось.
Однако я не думаю, что какой-либо современный компилятор может делать такие странные вещи (а Borland 5 исправил эту проблему)
Что касается стиля кода (кроме компромиссов между указателями и умными указателями), я обычно использую ссылки, если адрес не может быть НЕДЕЙСТВИТЕЛЕН по контракту функции, и иначе использую указатели.