Поделиться через


Предупреждение 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.
}

См. также

C6398