Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Здравствуйте, 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
ПК>
Спасибо, Павел.
Кстати в C++ есть такая неприятная фенечка:
литеральные строковые константы имеют тип const char []
Но вот такая вот конструкция :
char *p = "привет, Вася!";
очень даже работает. Груз legacy кода как я понимаю...