44 votes

le littéral « 0 » étant un candidat valide pour les surcharges de chaîne et de chaîne int et const provoque un appel ambigu

J'ai corrigé un bug récemment.

Dans le code suivant, l'une des fonctions surchargées était const et l'autre non. Le problème sera résolu en rendant les deux fonctions const.

Ma question est de savoir pourquoi le compilateur ne s'en plaint que lorsque le paramètre est 0.

 #include <iostream>
#include <string>

class CppSyntaxA
{
public:
    void f(int i = 0) const { i++; }
    void f(const std::string&){}
};

int main()
{
    CppSyntaxA a;
    a.f(1);  // OK
    //a.f(0);  //error C2666: 'CppSyntaxA::f': 2 overloads have similar conversions
    return 0;
}

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