Компилятор может оптимизировать передачу примитивного типа по ссылке на простую передачу по значению, если тип имеет такой же размер или меньше размера ссылки / указателя. Нет никакой гарантии, что компилятор сделает это, поэтому, если у вас есть выбор, передайте примитивные типы по значению. Однако в шаблонном коде вам все равно часто приходится передавать по ссылке - рассмотрите вектор push_back, который принимает константную ссылку. Если у вас есть вектор целых, вы будете передавать ссылку на примитивный тип. В этой ситуации вы надеетесь, что компилятор оптимизирует это, заменив ссылку на значение. Так как вектор может хранить большие типы, лучше всего принимать константную ссылку.