警告 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.
}