if (!x) 和 if (x == nullptr) 之间有什么区别吗?

Are there any differences between if (!x) and if (x == nullptr)?

忽略用户定义的运算符重载,是否存在 if (!x)if (x == nullptr) 行为不同的情况。或者,相反,是否存在 if(x)if (x != nullptr).

行为不同的情况

例如标准库中是否有任何类型 !x 的行为与 x == nullptr.

不同

注意:我知道这与 SO 上的许多其他问题非常相似,但相信它仍然值得提出自己的问题。我在这里给出了理由:Are questions about NULL sufficiently different from questions about nullptr?

此外,在元 post 上,L. F. 指出 std::optional<T*> 就是这样一种情况。但是,我很想知道是否还有其他类型,尤其是原始 and/or 指针类型。

大多数原始类型都不同。

布尔值例如:

!true 有效,而 true == nullptr 格式错误。