Анализатор обнаружил подозрительное приведение типов. Указатель на класс приводится к указателю на другой класс, при этом классы никак не связаны между собой наследованием.
Подозрительный код:
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.
Данная диагностика классифицируется как: