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