警告 C6398
明確に定義されたコードでは、フィールドの address-of を
null
にすることはできません
解説
address-of 演算子は、そのオペランドのアドレスを返します。 この値は nullptr
と決して比較しないでください。
- フィールドの address-of が
nullptr
になるのは、ベース ポインターがnullptr
で、フィールドがゼロ オフセットにある場合のみです (&p->field == nullptr
はp == 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.
}