Предупреждение C6397
Оператор address-of не может возвращать
null
указатель в хорошо определенном коде.
Замечания
Адрес оператора возвращает адрес своего операнда. Это значение никогда не должно сравниваться со nullptr
следующими значениями:
- Адрес поля может быть
nullptr
только в том случае, если базовый указатель былnullptr
, и поле находится на нулевом смещение (&p->field == nullptr
подразумеваетp == nullptr
). В этом случае выражение должно быть упрощено. - В любых других случаях значение унарного
&
оператора не может бытьnullptr
, если в коде не определено не определено поведение (&v == nullptr
всегда вычисляется как false).
Пример
bool isNull(int *a)
{
return &a == nullptr; // C6397 reported here.
}
Чтобы устранить эту проблему, дважды проверьте, является ли использование унарного &
намеренно:
bool isNull(int *a)
{
return a == nullptr; // no C6397 reported here.
}