Здравствуйте, na1s, Вы писали:
N>Явный косяк с логикой.
N>N>#include <iostream>
N>using namespace std;
N>class A
N>{
N>public:
N> A(){}
N> A(const A &a){cout<<"1st";}
N> A& operator =(A&){cout<<"2nd";}
N>};
N>int main()
N>{
N> A b;
N> A a=b;
N> return 0;
N>}
N>
N>Почему печатает 1st, хотя должен 2nd? Этому есть разумное объяснение, почему сделано именно так?
Доброговремени суток. Проблема в том, что писать надо не:
A b;
A a=b;
,а
A b;
A a;
a = b;
тогда все работает
Происходит энто от того, что в первом случае компилятор производит инициализацию экземпляра класса и по энтому вызывает конструктор.По крайней мере похоже на то, потому что второй вариант работает и выводится 2nd
"...наставники более мудры не благодаря умению действовать, а потому, что они обладают отвлеченным знанием и знают причины..." Аристотель.