c# – 运算符优先级
发布时间:2020-12-16 01:41:42 所属栏目:百科 来源:网络整理
导读:考虑一下这个C#类: class Node{ public Node Next;} 并考虑这两种情况: Node A = new Node(); Node B = A; B=(B.Next = new Node()); 和 Node A = new Node(); Node B = A; B.Next = (B=new Node()); 为什么他们会产生相同的结果!? (A) – (B) – 空 我
考虑一下这个C#类:
class Node { public Node Next; } 并考虑这两种情况: Node A = new Node(); Node B = A; B=(B.Next = new Node()); 和 Node A = new Node(); Node B = A; B.Next = (B=new Node()); 为什么他们会产生相同的结果!? (A) – >(B) – >空 我认为第二种情况会产生一个指向自身的节点,因为运算符优先… Java和Python也是如此吗? 解决方法
此行为不是运算符优先级的结果,而是Java,Python和C#中定义表达式求值顺序的规则的结果.具体来说,在Java,Python和C#中,表达式从左到右进行计算.但事实并非如此,例如,在C和C中,您编写的结果将是未定义的.
您可能熟悉这个C拼图: int i = 1; printf("%d,%dn",i++,++i); // what is printed? 在C中,结果未定义.它可能是1,3,它可能是2,2,甚至是其他东西.在Java C#和Python中,结果总是1,3(当然除了Python没有pre-orfix操作符). 运算符优先级是一个单独的问题.它定义了解析树,而不是评估顺序. 假设您使用二进制中缀运算符op1和op2的新语言.并说你有以下代码: e1 op1 e2 op2 e3 运算符优先级告诉您这是否意味着 ((e1 op1 e2) op2 e3) 或者是否意味着 (e1 op1 (e2 op2 e3)) 它没有告诉您评估e1,e2和e3的顺序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |