Нужно понимать, что, когда и зачем. Если нужно передать массив только для чтения, сделать это можно по константной ссылке - тогда и копирования не будет, и попытка изменения не откомпилируется. Главное, чего нужно избегать - бездумного использования технологий
Это не "имеет смысл", а первое правило. А компилятору такое оптимизировать запрещено, от этого меняется семантика кода, а не только делается оптимизиция.
const container_type &container - если функция не меняет состояние контейнера.
container_type &container - если меняет.
Прочтите книгу "Язык Программирования C++" Стенли Липпмана.