C 为什么复合赋值中不允许使用一元运算符?
我知道一个=b或a~=b等复合赋值在C中是不允许的,尽管a=!b或a=~b是允许的。只是好奇为什么语言设计成这样?有什么具体的技术原因吗?在最新的编译器中是否提供了此类支持?C语言的这种局限性(至少我觉得它是一种局限性)使初学者的语言变得复杂。这使我们能够记住C中的一些特性。定义C 为什么复合赋值中不允许使用一元运算符?,c,C,我知道一个=b或a~=b等复合赋值在C中是不允许的,尽管a=!b或a=~b是允许的。只是好奇为什么语言设计成这样?有什么具体的技术原因吗?在最新的编译器中是否提供了此类支持?C语言的这种局限性(至少我觉得它是一种局限性)使初学者的语言变得复杂。这使我们能够记住C中的一些特性。定义=和~=可能会导致不必要的混淆,因为某些标记可以是一元运算符或二元运算符,由上下文确定。例如:a-=b意味着什么,a=a-b或a=-b 无论如何,你不需要它们a=!b和a=~b不会导致更多的输入,而且很容易理解。a!=b
=
和~=
可能会导致不必要的混淆,因为某些标记可以是一元运算符或二元运算符,由上下文确定。例如:a-=b
意味着什么,a=a-b
或a=-b
无论如何,你不需要它们<代码>a=!b和
a=~b
不会导致更多的输入,而且很容易理解。a!=b
已经有了一个含义,而且它不是一个赋值。一般来说,a@=b
(对于二进制运算符@
)是a@b
的简写,除了a
只计算一次。这对一元运算符没有任何意义。你会用什么a~=
实现a=~a
?a=-b
不是a-=b
。你不是在争论它们应该做同样的事情吗?许多一元运算符要么兼作二元运算符(~
,-
),要么后跟一个=
(!=
)就已经有了意义。即使不是这样,语法也会很奇怪。例如,您将拥有xop=代码>后面没有任何内容。最接近这一点的C是增量前后运算符++
和-
,它们根本不使用=
。@Tomkarze:++
,-
,*
和&
都是一元运算符和二元运算符,但~
和我相信它们只是一元运算符。