我在教一个朋友编程,我费了好大劲才说服他们a = b和b = a是两个完全不同的东西。
我最终找到了正确的词来描述它(right associative),这让我思考。
有没有哪种编程语言是左联想的?我从来没有见过这样的语言:
a = b导致b被设置为a的值。
发布于 2016-08-03 04:11:49
如果我们谈论Operator associativity,我们实际上应该考虑两种类型的associativity:side_associative (例如= )或non-associative (例如== ),因为它对于机器来说没有任何区别,无论它是从左到右还是从右到左。
没有这样的编程语言最初是left associative的,但是它们中的一些通过操作符重载来允许它,还有一些(例如R)将同时允许:->和<-。
我相信在欧洲没有人会喜欢它,但在中东可能会发现它很可爱。我可以想象一下,有一些IDE可以切换到左边和右边,但最终编译器是用欧洲的方式编写的。
发布于 2016-08-03 13:16:06
你误解了结合性。如果op等价于a op (b op c),则运算符(a op b) op c是结合的。因此,对于不关联的运算符,无论a op b op c代表前者还是后者,都变得相关。因此,我们区分左结合操作符和右结合操作符,左结合操作符是(a op b) op c,右结合操作符是a op (b op c)。
大多数语言中的大多数运算符都是左关联的。以-为例:在大多数语言中,a - b - c等同于(a - b) - c,而不是a - (b - c)。
赋值运算符是一个例外,因为(a = b) = c通常是非法的(因为您不能对赋值的结果赋值)。因此,在大多数语言中,a = b = c等同于a = (b = c)。一个值得注意的例外是Python,其中a = b = c根本不关联,而且是非法的。
所有这些都与a = b和b = a之间的区别没有任何关系。因为这只涉及=运算符的一次使用,所以结合性根本不会影响到这一点。相反,相关属性是commutativity:如果op等价于a op b,则操作符b op a是可交换的。我不知道有哪种语言的赋值是可交换的,我也不知道它是怎么回事。
像左交换性或右交换性这样的概念是不存在的。据我所知,“a = b是否将b赋值给a,还是相反?”这个问题没有术语--这只是赋值操作符语义的一部分。
发布于 2016-08-03 04:05:29
我不这么认为。尽管你总是可以重载赋值操作符,并在你的c++中造成完全的混乱。
https://stackoverflow.com/questions/38729454
复制相似问题