gpt4 book ai didi

java - 表达式产生错误

转载 作者:行者123 更新时间:2023-11-29 03:07:15 26 4
gpt4 key购买 nike

我最近才知道 C++ 允许这样的合法代码:

12; //just an expression -- expression statement to be exact
int i = 45;
(i > 0) ? i-- : 1;

虽然这可能不是最佳实践,但我可以看到一些有用的情况,在这些情况下使用表达式作为完整语句可能会有所帮助。所以,我只是想知道,为什么 Java 中没有类似的功能?禁止如下代码的原因是什么:

public static void main (String[] args){
func() + 1; // ERROR: NOT A STATEMENT
}

public static int func(){
return 34;
}

最佳答案

Altghough it may not be best pracitce, I can see some useful situations in which using an expression as a full statement could help

在 Java 中完全允许使用表达式作为语句(比如 System.out.println("hello") )。只是他们对始终没有副作用的表达式(如算术表达式)做出了明确的异常(exception)。在任何情况下,使用无副作用的表达式作为语句都不会产生任何效果(有用或无用)。

So, I was just wondering, why isn't there a similar feature in Java?

你想错了:它是 Java 中的一个特性,但在 C 中却没有。

类似42;的原因在 C 中允许而在 Java 中不允许是在 C 标准的语法定义中有一条规则 <stmnt> ::= <expression> ';' . Java 中存在相同的规则,但在 Java 中他们添加了一个异常(exception),使得将此规则应用于始终没有副作用的表达式是非法的。他们添加了这条规则,因为这样的代码永远不会产生任何影响,而且由于程序员不太可能故意编写无意义的代码,所以它很可能是错误,因此应该被视为错误。

请注意,添加异常的唯一缺点是它使标准稍微复杂一些(通过向语法添加异常)并且使实现稍微困难一些(因为现在编译器需要检测这样的代码并生成这是一个错误 - 尽管应该注意,大多数(如果不是全部的话)今天使用的 C 和 C++ 编译器也会检测到这样的代码并为此产生警告。

关于java - 表达式产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31529568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com