Je pensais que les constructeurs contrôlaient l'initialisation et l'assignation des fonctions opérateur = C++. Alors pourquoi ce code fonctionne-t-il?Affectation et initialisation en C++
#include <iostream>
#include <cmath>
using namespace std;
class Deg {
public:
Deg() {}
Deg(int a) : d(a) {}
void operator()(double a)
{
cout << pow(a,d) << endl;
}
private:
int d;
};
int
main(int argc, char **argv)
{
Deg d = 2;
d(5);
d = 3; /* this shouldn't work, Deg doesn't have an operator= that takes an int */
d(5);
return 0;
}
Sur la troisième ligne de la fonction principale, je suis un int
à assigne un objet de classe Deg
. Comme je n'ai pas de fonction operator=(int)
, j'ai pensé que cela échouerait certainement ... mais appelle le constructeur Deg(int a)
. Est-ce que les constructeurs contrôlent également l'assignation?
+1 pour – dimba
explicite Au moins une entreprise que j'ai travaillé à la règle a eu « utilisation explicite tous les constructeurs à moins qu'il y ait une bonne raison de ne pas "parmi ses normes de codage". Cela permet d'éviter des situations potentiellement embarrassantes comme celle-ci. – Sean
Je suppose que vous voulez dire sur tous les constructeurs qui peuvent être invoqués avec un seul argument :)? –