Здравствуйте, VladD2, Вы писали:
CS>>CS>>class A {...}
CS>>A a1;
CS>>const A a2;
CS>>
CS>>a1 и a2 принадлежат разным классам. С++ например считает именно так.
VD>И почему тогда работает
VD>VD>A a1;
VD>const A a2 = a1;
VD>
VD>?
Потому что тип A
is a const A. То же самое будет и с двумя разными классами, определенными соответствующим образом:
class constA { };
class A : public constA { };
A a1;
constA a2 = a1;
Сразу отвечу, почему работает копирование "наоборот":
const A a1;
A a2 = a1;
Потому что у A определен конструктор, принимающий const A&. Если бы его не было, последнее преобразование не работало бы:
class A {
public:
A() { }
A(A&) { }
};
const A a1;
A a2 = a1; // ERROR
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен