Un inconvénient du passage par référence est que si les paramètres sont de tailles importantes, la recopie est coûteuse. Un inconvénient du passage par référence peut être qu'il laisse la possibilité pour une fonction de modifier les paramètres d'appel. En C++, grâce aux références sur les constantes, on peut interdire une telle modification . Dans le cas d'une référence sur constante, une variable temporaire sera créée. Tout en gardant les avantages du passage par valeur (non modification des paramètres d'appel) le passage par référence permet ainsi d éviter les recopies sur la pile d'exécution:
#define MAX 1000 struct tab{ int t[MAX]; // gros tableau!! tab(int j){ int i; // initialisation for(i=0;i<MAX;i++)t[i]=j;} }; const tab t0=tab(0); // constante tab int bad(tab t1){ // mauvais code return t1.t[0]; } int g(tab & t1){ // pas de recopie return t1.t[0]; // mais ne peut s'appliquer // à des constantes } int good(const tab &t1){ // oui return t1.t[0]; } /*...*/ void main(){ bad(t0); // oui // g(t0); interdit good(t0); // oui }