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)
它在这里产生编译器错误,就像在许多其他语言中一样.
这肯定是语言语法产生的错误.但为什么语法会禁止这样的比较呢?从程序员的角度来看,使用比较运算符的等号的哪一侧无关紧要.
因为在等于左侧的操作符的两个比较都是有意义的,语法解析是线性完成的(从左到右,反之亦然).但为什么这个命令很重要?
因为while =>是有效的数学比较器,所以它不是有效的语言标记.
撰写编写器会做出很多妥协.不支持equals和大于符号的每个组合只是使语言解析更快的妥协之一.
---更新了上面提到的复杂性的一些例子---
使用C++,从表面上看,这似乎是一个"简单的修复"; 解析器将为两个输入创建相同的"GreaterThanOrEqual"标记; 然而,当人们可以通过编写operator>=(...)方法来覆盖"GreaterThanOrEqual"标记的行为时,它并不像看起来那么容易.
如果一个提供两个operator>=(...)和operator=>(...)压倒一切的方法呢?是否需要某种机制才能使它们相同?如果你定义一个没有另一个,另一个应该"别名"回到定义的那个?人们可以很容易地看到它会如何增加大量的角落复杂性.
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |