解析——为什么是C++;模板var decls和java不';t与泛型var decls? 在C++中,如果我写了代码> a < b> c>代码>,该意思既可以是表达式语句(A< B)> C ,也可以是类型 > < 的变量C的声明。p>

解析——为什么是C++;模板var decls和java不';t与泛型var decls? 在C++中,如果我写了代码> a < b> c>代码>,该意思既可以是表达式语句(A< B)> C ,也可以是类型 > < 的变量C的声明。p>,java,c++,parsing,syntax,compiler-construction,Java,C++,Parsing,Syntax,Compiler Construction,为什么这在java中不是问题?泛型是否已经废弃了(ac选项,因为尽管它进行了解析,但它总是以类型错误结束?C++是否坚持将此选项保留向后兼容?< /P> < P>两种语言中真值和假值之间存在细微差别。 在Java(ac中将是布尔值和c之间的比较,即使c也是布尔值,这也没有多大意义。由于Java没有运算符重载,因此不可能出现(ac不能写成(a另一方面,运算符重载允许您分配完全不同的语义到 。因此, A< B可能根本不是布尔值。< P>对于C++或java,这不是一个真正的问题,因为不同的原因。

为什么这在java中不是问题?泛型是否已经废弃了
(ac
选项,因为尽管它进行了解析,但它总是以类型错误结束?C++是否坚持将此选项保留向后兼容?< /P> < P>两种语言中真值和假值之间存在细微差别。

在Java
(ac
中将是布尔值和c之间的比较,即使c也是布尔值,这也没有多大意义。由于Java没有运算符重载,因此不可能出现
(ac
不能写成
(a


< C++ >另一方面,运算符重载允许您分配完全不同的语义到<代码> <代码或代码> <代码>。因此,<代码> A< B<代码>可能根本不是布尔值。

< P>对于C++或java,这不是一个真正的问题,因为不同的原因。

在Java中,
ac只能是声明,因为不能使用任意表达式。可能的表达式语句列表不包括比较表达式或算术表达式(除递增/递减前/后之外),因此该语句必须是本地声明,并且在该上下文中
a
必须是泛型类型


在C++中,一个<代码>的含义可以是其中之一,但具体的问题是什么?如果编译器能告诉
a
它是一个模板,它就可以正常工作,即使它被编译,
ac
也不会像它看起来那样工作。@RustyX-在我看来,如果a小于b,似乎有人想将c与1进行比较,如果a小于b,则与0进行比较;)因为Java没有模板var decls。@托哈瓦:我真傻。我当时正从路边经过。显然,一些随机的在线黑客更具权威性。仍然不能解释为什么cpp没有淘汰ac。如果没有更好的答案,我将接受。反正我只是投了更高的票。