警告 C6398

在明确定义的代码中,字段的地址不能为 null

注解

Address-of 运算符返回其操作数的地址。 此值不应与 nullptr 进行比较:

  • 如果基指针为 nullptr 且字段位于零偏移量(&p->field == nullptr 表示 p == nullptr),则 address–of 字段只能为 nullptr。 在这种情况下,应简化表达式。
  • 在任何其他情况下,一元 & 运算符的值均不能为 nullptr,除非代码中存在未定义的行为(&v == nullptr 始终计算结果为 false)。

示例

struct A { int* x; };

bool hasNullField(A *a)
{  
    return &a->x == nullptr; // C6398 reported here.
}

要解决此问题,请仔细检查使用一元 & 是否是有意的:

struct A { int* x; };

bool hasNullField(A *a)
{  
    return a->x == nullptr; // no C6398 reported here.
}

另请参阅

C6397