Passage de paramètre par valeur ou par const référence ?
En régle générale, je suppose qu'il vaut mieux passer des objets "lourds" en paramètre de fonction par référence. Mais n'y-a-t-il pas des cas où c'est mieux de les passer par valeur ? (dans les deux cas je pense à un usage read only)
Par exemple, il me semble inutile de passer un int par référence (ou tout type de base). Mais quid pour des objets légers comme un smart pointer ou l'habituel std::string ?
Dans le cas du smart pointer par exemple, le passage par valeur va induire une copie (avec incrémentation dans le cas d'un shared_ptr par exemple) bien souvent inutile. Le passage par référence, lui, va provoquer une indirection supplémentaire à chaque accès à un des membres de l'objet pointé.
En général je passe les paramètres par const référence la plupart du temps, mais je doute que se soit toujours le plus efficace.
Merci.