Я думал, что конструкторы управляют инициализацией и присваиванием функций operator = functions в C++. Так почему же этот код работает?Назначение против инициализации в 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;
}
На третьей строке основной функции, я Назначив int
к объекту класса Deg
. Поскольку у меня нет функции operator=(int)
, я думал, что это, конечно же, не получится ... но вместо этого он называет конструктор Deg(int a)
. Так и конструкторы также управляют назначением?
+1 явной – dimba
По крайней мере одной компании я работал уже имели правило «использовать явный на все конструкторы, если нет веских оснований не «среди своих стандартов кодирования». Это помогает избежать потенциально загадочных ситуаций, подобных этому. – Sean
Я полагаю, вы имеете в виду все конструкторы, которые могут быть вызваны одним аргументом :)? –