Одно хорошее соглашение:
- Передавать объекты по указателю всякий раз, когда ими можно манипулировать ( побочный эффект или как вывод ) с помощью функции.
- Передача всех других объектов по константной ссылке .
Это очень четко указывает вызывающему абоненту с минимальной документацией и нулевыми затратами на производительность, какие параметры являются постоянными или нет.
Вы можете применить это к примитивным типам, а также, но это спорный вопрос, как должны ли вы или нет использовать константные ссылки для параметров без выходных, так как они явно проходят по значению и не могут выступать в качестве выхода из функции любым способом (для прямых типов - не указатели / ссылки - конечно).