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 + ~=
不合法?
答案 0 :(得分:11)
因为function balanceOfTokenB(address _owner) constant returns (uint256 balance);
是一元运算符,而不是二进制。
当第一个操作数是目的地时,短格式~
仅适用于二元运算符。
答案 1 :(得分:6)
~
只是一元运算符。
对于任意运算符a = a @ b
,a @= b
到@
的收缩只有在需要两个参数时才有意义;即如果@
是二进制运算符。
答案 2 :(得分:1)
为什么{+ 1}}在C ++中不合法?
那是因为C ++不包含~=
运算符; ~=
只是两个单独的令牌。
至于为什么C ++不是那样设计的,你必须问设计师,但我认为可以说这是因为C ++最初基于C并且与C具有相同的运算符,只有为新语言功能添加了少量新运算符(即~=
和::
)。
所以你应该再次问这个问题C.
答案 3 :(得分:0)
因为“运算符赋值”(如+=
,^=
)基于具有两个操作数的原始运算。
例如,a + b
有两个+
的操作数,a += b
提供与a = a + b
相同的净效果。
运算符~
是一元运算符,即它接受一个操作数。所以a = ~b
有道理,但a = a~b
没有。由于a = a~b
没有意义,a ~= b
也没有。