6 votes

Surcharge des fonctions constantes

Je ne comprends pas pourquoi le code suivant ne produit pas d'erreur, car les arguments passés à l'affichage sont du même type, à savoir char const fait vraiment une différence ?

#include<iostream>

using namespace std;

void display(char *p)
{
    cout<<p;
}
void display(const char *p)
{
    cout<<p;
}

int main()
{
    display("Hello");
    display("World");
}

EDIT D'après les réponses, le premier affichage n'est jamais appelé, ce qui est correct, tout comme la sortie.

Mais si je faisais comme ça :

int main()
{
    char *p="Hello";
    display(p);//now first display is called.
    display("World");
}

Le compilateur donne un warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] Cela signifie-t-il que la chaîne n'est plus considérée comme une constante ?

0voto

alexbuisson Points 2511

"parce que les arguments passés à l'affichage sont du même type, c'est-à-dire char."

Non, ici l'argument est "const char*". Le type de données est le mais le qualificatif const indique que la chaîne littérale que vous avez codée en dur, n'est pas quelque chose qui peut être changé.

"Est-ce que la constance fait vraiment une différence ?"

Oui, le qualificatif const fait une différence. Dans Display(char*), vous pouvez mettre à jour le contenu de la chaîne à terminaison nulle que vous avez passée, mais pas dans Display(const char*). Ce fait permet une meilleure optimisation par le compilateur.

Mais lisez ça http://www.possibility.com/Cpp/const.html c'est une bonne source pour commencer à utiliser efficacement la const.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X