# V1027. Pointer to an object of the class is cast to unrelated class.

Анализатор обнаружил подозрительное приведение типов. Указатель на класс приводится к указателю на другой класс, при этом классы никак не связаны между собой наследованием.

Подозрительный код:

    struct A {};
    struct B {};
    struct C : B {};
    void f(A *a, B *b) {
      C *c = (C*)a;
    }

Возможно, нужно было привести другую переменную. Исправленный код:

    void f(A *a, B *b) {
      C *c = (C*)b;
    }

Если же такое поведение является ожидаемым, то следует использовать 'reinterpret_cast':

    void f(A *a, B *b) {
      C *c = reinterpret_cast<C*>(a);
    }

В этом случае анализатор не будет выдавать предупреждение.

Примечание. В некоторых проектах, особенно выполняющих низкоуровневые операции, можно встретить очень много приведений между различными структурами, не связанных между собой наследованием, но связанных логически. Другими словами, такие приведения типов используются сознательно и необходимы. В этом случае предупреждения анализатора будут только создавать ненужный шум и будет рационально просто отключить диагностику V1027.

Данная диагностика классифицируется как:

CWE-704