Myślałem, że inicjalizacja kontroli konstruktorów i operator = kontrola funkcji w C++. Dlaczego ten kod działa?Przypisanie vs Inicjalizacja w 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;
}
Na trzeciej linii głównej funkcji, jestem przypisywania int
do obiektu klasy Deg
. Ponieważ nie mam funkcji operator=(int)
, myślałem, że to z pewnością nie powiedzie się ... ale zamiast tego wywołuje konstruktor Deg(int a)
. A więc czy konstruktorzy również kontrolują przypisanie?
+1 do wyraźnej – dimba
Przynajmniej jednej firmie pracowałem na miał regułę „stosowanie na jawne wszystkich konstruktorów, chyba że istnieje dobry powód, aby nie "wśród swoich standardów kodowania. Pomaga to uniknąć takich zagadkowych sytuacji. – Sean
Przypuszczam, że masz na myśli wszystkie konstruktory, które można wywoływać za pomocą pojedynczego argumentu :)? –