С++: сравнение указателя базы с производным от одного и того же объекта
Пример:
class A{
int x;
};
class B{};
class C : public A, public B {};
C c;
A* a = &c;
B* b = &c;
когда я проверяю значение & c и b, они различны, поскольку b находится после a в памяти, но все же, когда я оцениваю & c == b, они одинаковы, почему это так?
Ответы
Ответ 1
В выражении &c == b
оба операнда должны быть принуждены к одному типу. В этом случае &c
(a C*
) можно преобразовать в B*
, поскольку B
является доступным базовым классом C
. Это то же самое преобразование, что и в B* b = &c
, поэтому результирующие значения совпадают, и сравнение возвращает true.