Преобразования указателей и ссылок
При работе с указателями и ссылками компилятор автоматически выполняет только два вида преобразований.
Если имеется указатель или ссылка на производный тип, а требуется, соответственно, указатель или ссылка на базовый тип.
Если имеется указатель или ссылка на изменяемый объект, а требуется указатель или ссылка на неизменяемый объект того же типа.
size_t strlen(const char* s); // прототип функции class A { }; class B : public A { }; char* cp; strlen(cp); // автоматическое преобразование из // char* в const char*
B* bObj = new B; // преобразование из указателя на A* aObj = bObj; // производный класс к указателю на // базовый класс
Если требуются какие-то другие преобразования, их необходимо указывать явно, но в этом случае вся ответственность за правильность преобразования лежит на программисте.