警告 C6398

明確に定義されたコードでは、フィールドの address-of を null にすることはできません

解説

address-of 演算子は、そのオペランドのアドレスを返します。 この値は nullptr と決して比較しないでください。

  • フィールドの address-of が nullptr になるのは、ベース ポインターが nullptr で、フィールドがゼロ オフセットにある場合のみです (&p->field == nullptrp == 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