在C ++中,如果我写a < b > c
,其含义可以是表达式语句(a < b) > c
,也可以是类型为a<b>
的变量c的声明。
为什么这不是java中的问题? (a < b) > c
选项是否被泛型所取代,因为虽然它解析,但它总是以类型错误结束? C ++是否坚持要保留此选项以实现向后兼容?
答案 0 :(得分:3)
由于不同的原因,它对C ++或Java来说都不是问题。
在Java中,a < b > c;
只能是一个声明,因为任意表达式不能是expression statements。可能的表达式语句列表不包括比较或算术表达式(除了前/后递增/递减),因此该语句必须是本地声明,并且在该上下文中a
必须是泛型类型。
在C ++中,如果<
遵循已声明为模板的标识符,则Search-SortedArray
只能是模板括号,并且该声明需要在使用标识符之前。虽然这不是特别干净的设计(它需要一个上下文相关的解析器),但该问题已经出现在C中,如果不知道标识符是否是类型别名,就无法正确解析。 [注1]这基本上要求词汇扫描仪访问符号表,并确保符号表至少包含关于&#34;种类的准确信息。每个标识符(虽然不是类型/类)。
答案 1 :(得分:2)
两种语言中的真实和虚假值之间存在细微差别。
在Java中 For i = 1 To UBound(arr, 1)
If arr(i, 1) <> "" Then
scriptDic(arr(i, 1)) = scriptDic(arr(i, 1)) + arr(i, 2)
End If
将是布尔值和c之间的比较,即使c也是布尔值,它也没有多大意义。由于Java没有运算符重载,因此不能将(a < b) > c
写为(a < b) > c
。
另一方面,在C ++中,运算符重载允许您为(a < b) != c
或<
分配完全不同的语义。因此,>
可能根本不是布尔值。