Cuando se pasa un argumento a un función, lo normal debería ser pasarlo como una referencia constante. Aunque al principio puede parecer que sólo tiene ventajas en términos de eficacia (y normalmente en diseño e implementación inicial no se tiene muy en cuenta la eficacia), además tiene otras: como se podrá ver en el resto del capítulo, se requiere un constructor de copia para pasar un objeto por valor, y esto no siempre es posible.
La eficacia puede mejorar substancialmente por este simple hábito: pasar un argumento por valor necesita una llamada a un constructor y otra a un destructor, pero si no se va a modificar el argumento, el hecho de pasarlo como una referencia constante sólo necesita poner una dirección en la pila.
De hecho, prácticamente la única situación en la que no es preferible pasar la dirección, es cuando provocará tales problemas a un objeto que pasar por valor es la única alternativa segura (en vez de modificar el objeto que está fuera del ámbito de la función, algo que el que llama a la función normalmente no espera). Ese es el tema de la siguiente sección.