比较只有形式<=和> =(而不包括= <和=>)的原因是什么?

Rya*_*yan 0 c++ java compiler-errors

在许多语言,比如Java和C/C++,比较始终形式的完成<=>=.例如,这是一个工作示例程序:

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        // Get inputs
        int input1 = s.nextInt();
        int input2 = s.nextInt();

        // compare them
        if (input1 >= input2) {
            System.out.println("Input 1 is greater than or equal to input 2");
        } else {
            System.out.println("Input 1 is less than input 2");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这会编译并正确运行.但是,如果我将一条比较线更改为:

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        // Get inputs
        int input1 = s.nextInt();
        int input2 = s.nextInt();

        // compare them
        if (input1 => input2) { // ------Changed this line------
            System.out.println("Input 1 is greater than or equal to input 2");
        } else {
            System.out.println("Input 1 is less than input 2");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它在这里产生编译器错误,就像在许多其他语言中一样.

这肯定是语言语法产生的错误.但为什么语法会禁止这样的比较呢?从程序员的角度来看,使用比较运算符的等号的哪一侧无关紧要.

因为在等于左侧的操作符的两个比较都是有意义的,语法解析是线性完成的(从左到右,反之亦然).但为什么这个命令很重要?

Edw*_*uck 5

因为while =>是有效的数学比较器,所以它不是有效的语言标记.

撰写编写器会做出很多妥协.不支持equals和大于符号的每个组合只是使语言解析更快的妥协之一.

---更新了上面提到的复杂性的一些例子---

使用C++,从表面上看,这似乎是一个"简单的修复"; 解析器将为两个输入创建相同的"GreaterThanOrEqual"标记; 然而,当人们可以通过编写operator>=(...)方法来覆盖"GreaterThanOrEqual"标记的行为时,它并不像看起来那么容易.

如果一个提供两个operator>=(...)operator=>(...)压倒一切的方法呢?是否需要某种机制才能使它们相同?如果你定义一个没有另一个,另一个应该"别名"回到定义的那个?人们可以很容易地看到它会如何增加大量的角落复杂性.