java - 在 C++ 和 Java 中只有一个返回值的原因是什么?

标签 java c++

通常我浏览一下这个事实,然后将其视为“这就是车轮旋转的方式”,但今天我想知道这是从哪里来的:为什么一个函数只有一个返回(引用)值?

为什么不能,一个函数返回多个值是困难还是不明智?是否因为对象以及您应该如何期望始终以对对象的引用的形式返回数据包?

如果您将已声明的函数视为契约(Contract),其中说明了如何调用函数、应该采用哪些参数以及它具有哪种返回值类型,那么我看不到只有一个返回值背后的逻辑,因为您可以反过来应用相同的逻辑(从而为多个返回值创建契约(Contract))。

我能看到的基于逻辑的唯一原因是,如果一个函数返回多于 1 件事情,它也应该出于多于 1 个原因操纵多件事情,这违背了函数应该只做 的哲学 一件事。如果一件事是操作一个对象并返回另一个对象,那将是有意义的,您可以使用被操作的对象返回一个引用值..

那么,究竟为什么会存在这种限制呢?

最佳答案

当你有多个值 x1 ... xN 时,你很容易拥有元组 (x1, ..., xN)是一个单一的(尽管是复合的)值。如果您的语言中没有元组,请随意使用任何聚合类型(structclass、数组、其他集合)。所以从这个角度来说,返回“多个”值和返回单个值是完全等价的。

这只是意味着您只需要一个,但是为什么要省略另一个呢?

首先,无论如何您都需要聚合类型,因此您可以选择同时拥有或仅拥有聚合类型。其次,如果一个函数可以返回“多个值”,您将面临一个语义难题:突然一个表达式不会计算为值(我们之前已经非常明确地定义过),这是一种新的、不同类别的东西,称为“多个值”。现在这个结果的静态类型是什么?程序可以做什么,不能做什么?在实现方面是什么意思?

您当然可以人为地回答这些问题,但任何明智的方法都只是元组类型。忽略这会让你对一个非常有用的观点视而不见,拒绝让它们成为一等值可能比说“这些是元组类型,它们可以像这样构造并像这样解构”更复杂 .

关于java - 在 C++ 和 Java 中只有一个返回值的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29457319/

相关文章:

c++ - 选择 initializer_list 迭代器定义

c++ - 与 unique_ptr 配对的正确方法是什么?

java - JPA:单例实体

java - 规范路径和绝对路径有什么区别?

java - Java中的深度递归导致堆栈溢出?

c++ - 定时内存方 block 游戏。现在无需计时即可工作

c++ - C++(VS2008)中的内存释放

java - 当 main 抛出异常时会发生什么?

java - 调用 Class.forName() 而不保存对其返回的对象的引用的目的是什么?

c++ - 找出自 1970 年 1 月 1 日以来过去多少秒