为什么 C++ 中没有运算符 ~=?

Why is there no operator ~= in C++?

int main()
{
    unsigned int a = 0;
    unsigned int b = 0;

    a ^= b; // ok
    a |= b; // ok
    a &= b; // ok
    a = ~b; // ok
    a ~= b; // error : expected ';' after expression
}

^=|=&=都是合法的。

为什么 ~= 在 C++ 中不合法?

Why isn't ~= legal in C++?

那是因为 C++ 不包含 ~= 运算符; ~= 只是两个单独的标记。

至于为什么C++不是这样设计的,你得问设计者,但我认为可以肯定地说,这是因为C++最初是基于C的,并且具有与C相同的运算符,只为新语言功能添加了一些新运算符(即 ::->*)。

所以你可能应该为 C 再问这个问题。

因为~一元运算符,而不是二元

当第一个操作数是目标时,缩写形式 op= 仅适用于二元运算符。

~ 永远只是一个 一元 运算符。

对于任意运算符 @a = a @ ba @= b 的缩略只有在需要两个参数时才有意义;即如果 @binary 运算符。

因为"operator assignments"(如+=^=)是基于具有两个操作数的原始运算。

例如,a + b 有两个操作数 +,而 a += b 给出与 a = a + b 相同的净效果。

运算符 ~ 是一元运算符,即它接受一个操作数。所以 a = ~b 有道理,但 a = a~b 没有。由于 a = a~b 没有意义,因此 a ~= b.

也没有意义