为什么 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 @ b
到 a @= b
的缩略只有在需要两个参数时才有意义;即如果 @
是 binary 运算符。
因为"operator assignments"(如+=
、^=
)是基于具有两个操作数的原始运算。
例如,a + b
有两个操作数 +
,而 a += b
给出与 a = a + b
相同的净效果。
运算符 ~
是一元运算符,即它接受一个操作数。所以 a = ~b
有道理,但 a = a~b
没有。由于 a = a~b
没有意义,因此 a ~= b
.
也没有意义
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 @ b
到 a @= b
的缩略只有在需要两个参数时才有意义;即如果 @
是 binary 运算符。
因为"operator assignments"(如+=
、^=
)是基于具有两个操作数的原始运算。
例如,a + b
有两个操作数 +
,而 a += b
给出与 a = a + b
相同的净效果。
运算符 ~
是一元运算符,即它接受一个操作数。所以 a = ~b
有道理,但 a = a~b
没有。由于 a = a~b
没有意义,因此 a ~= b
.