Je voudrais écrire deux fonctions distinctes pour gérer une valeur constante et une variable d'un type donné (à savoir, int
).«F (5)» et «int x; F (x) »pour appeler différentes fonctions?
est ici le cas de test exemple:
int main(void) {
int x=12;
F(5); // this should print "constant"
F(x); // this should print "variable"
}
Je pensais que ce serait suffisant pour définir:
void F(int v) { cout << "constant\n"; }
void F(int& v) { cout << "variable\n"; }
Cela suppose que le compilateur choisira int&
pour les variables comme « mieux spécialisé » et int
pour les constantes comme seul choix). Cependant, ce G++
est le résultat:
test.cc: In function ‘int main()’:
test.cc:13: error: call of overloaded ‘F(int&)’ is ambiguous // for line: F(x);
test.cc:4: note: candidates are: void F(int)
test.cc:5: note: void F(int&)
G++
ne choisit F(int)
pour les constantes, mais ne sait pas quelle fonction de choisir des variables.
Est-ce que quelqu'un a une idée de ce qui se passe?
Contexte: J'expérimente des méthodes d'unification de type prologue en C++. Être capable de connaître la différence entre les constantes et les variables m'aiderait à choisir le comportement d'unification souhaité (affectation ou comparaison) dans des cas tels que functor(x,5) <=> functor(3,5)
.
Et ce qui est probablement ce que je avais besoin. Je vous remercie. – liori
Oui, ceci (le f (int const) et f (int &)) était ce dont j'avais réellement besoin. Merci beaucoup! – liori