警告 C6397

Address–of 运算符无法在定义完善的代码中返回 null 指针

注解

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

  • 如果基指针为 nullptr 且字段位于零偏移量(&p->field == nullptr 表示 p == nullptr),则 address–of 字段只能为 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