警告 C6397
address-of 運算子無法在定義良好的程式碼中傳回
null
指標
備註
address-of 運算子傳回其運算元的位址。 這個值不應該與 nullptr
比較:
- 如果基底指標是
nullptr
,address-of 欄位只能是nullptr
,而且欄位位於零位移 (&p->field == nullptr
意指p == 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.
}