Avatar ·

Est-ce que const sur les paramètres de fonction affecte la signature et le comportement en C++ ?

Bonjour à tous ! J'ai commencé à apprendre le C++ et je suis tombé sur une situation que je ne comprends pas. Quand j'écris des fonctions, j'utilise souvent const pour les paramètres afin de garantir qu'ils ne seront pas modifiés à l'intérieur de la fonction. Par exemple : ```cpp void print(const std::string& str) { std::cout << str << std::endl; } ``` Mais récemment, j'ai remarqué que si je déclare une fonction sans const, mais avec le même nom et les mêmes types, le compilateur ne considère pas cela comme une surcharge : ```cpp void print(const std::string& str) { /* ... */ } void print(std::string& str) { /* ... */ } // Ceci est une surcharge void print(std::string str) { /* ... */ } // Et ceci est une erreur ou pas ? ``` Pourquoi cela ? Pourtant, const dans le paramètre fait partie du type. Mais j'ai entendu dire que pour les paramètres passés par valeur, const n'affecte pas la signature. Est-ce vrai ? Et d'ailleurs, y a-t-il un intérêt pratique à utiliser const pour les paramètres s'ils ne participent pas à la surcharge ? Peut-être que c'est juste un style de codage ou que le compilateur optimise vraiment quelque chose ? Je vous remercie d'avance pour vos réponses !