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

乔普

通常我会看一眼这个事实,只是接受它为“这就是轮子如何旋转”,但今天我不知道这是从哪里来的:为什么一个函数只有一个返回(参考)值?

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

如果您将声明的函数视为合同,其中说明了如何调用函数,应采用的参数以及具有的返回值类型,那么我看不到只有一个返回值的逻辑,因为您可以应用反之亦然(因此为多个返回值创建合同)。

我所看到的基于逻辑的唯一原因是,如果一个函数返回不止一件事情,那么它也应该出于不止一个原因而操纵一件以上事情,这违背了一个功能只能一件事情的理念如果那件事是操纵一个对象并返回另一个对象,那将是有意义的,并且您可以使用操纵的对象返回一个参考值。

那么,为什么存在这个限制呢?

用户395760

只要您有多个值x1... xN,您就可以轻而易举地得到一个元组(x1, ..., xN)该元组是单个(尽管是复合值)值。如果你没有元组你的语言,使用任何聚合类型(structclass随意,数组,其他收藏品)。因此,从这个角度来看,返回“多个”值和返回单个值是完全等效的。

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

首先,无论如何都需要聚合类型,因此要在同时具有两种或仅具有聚合类型之间进行选择。其次,如果一个函数可以返回“多个值”,那么您将面临一个语义难题:突然一个表达式不能求值(我们之前已经非常明确地定义了值),这就是这种新的不同类别的事物,称为“多个值”。现在,此结果的静态类型是什么?该程序可以做什么,不能做什么?在实施方面意味着什么?

当然,您可以人为地回答这些问题,但是任何明智的方法都将等于元组类型。无视,让你瞎一个非常有用的观点,并拒绝让他们一流的价值可能是比说复杂,“这些都是元组类型,它们可以用这样的解构这样”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C中这种狡猾的内存泄漏的原因是什么

来自分类Dev

C中访问分段错误的原因是什么

来自分类Dev

C ++部分概念ID:显式模板规范顺序/第一个参数的特殊状态的原因是什么?

来自分类Dev

使用 return() 方法时 args() 仅返回一个值的原因是什么?

来自分类Dev

C语言:从两个具有不同返回值的相似函数中创建一个泛型函数

来自分类Dev

Linux和Windows之间的返回值不同的原因是什么?如何解决?

来自分类Dev

在C#中使用C / C ++库的方法返回一个随机值,而不是上面的返回值

来自分类Dev

当一行中只有一个#时,C ++预处理器会做什么?

来自分类Dev

从C#中的方法返回值或错误消息的最佳实践是什么?

来自分类Dev

C ++中主要函数返回值的约定是什么?

来自分类Dev

C++17 中 std::vector::emplace_back 返回值的用例是什么?

来自分类Dev

在 C++ 中使用 upcasting 和 downcasting 的原因是什么?

来自分类Dev

有些人在目标C中使用GOTO语句的原因是什么?

来自分类Dev

C:数据类型。sqrt函数与int一起工作的原因是什么?

来自分类Dev

C程序中“异常程序终止”错误的可能原因是什么?

来自分类Dev

C:这个浮点异常的原因是什么?

来自分类Dev

C++ 程序输出与预期不同的原因是什么?

来自分类Dev

在c++中使用一个函数的返回值作为另一个函数的参数

来自分类Dev

如何在C中返回一个int值?

来自分类Dev

C ++中的返回值

来自分类Dev

有什么方法可以从Objective-C的块中返回值吗?

来自分类Dev

为什么C#代码没有从存储过程中返回值

来自分类Dev

调用存储过程时,在C#中获取返回值和一组记录

来自分类Dev

只有一个变量正在打印C ++

来自分类Dev

Visual C ++只有一个线程在工作(OpenMP)

来自分类Dev

为什么即使在C ++ 20中std :: memcpy也不能成为constexpr的原因是什么?

来自分类Dev

区分C中的返回值和错误

来自分类Dev

在Word女士中,当只有一列时,会导致两个表并排出现的原因是什么?

来自分类Dev

在c ++中随机生成一个数字,但只有某些倍数

Related 相关文章

  1. 1

    C中这种狡猾的内存泄漏的原因是什么

  2. 2

    C中访问分段错误的原因是什么

  3. 3

    C ++部分概念ID:显式模板规范顺序/第一个参数的特殊状态的原因是什么?

  4. 4

    使用 return() 方法时 args() 仅返回一个值的原因是什么?

  5. 5

    C语言:从两个具有不同返回值的相似函数中创建一个泛型函数

  6. 6

    Linux和Windows之间的返回值不同的原因是什么?如何解决?

  7. 7

    在C#中使用C / C ++库的方法返回一个随机值,而不是上面的返回值

  8. 8

    当一行中只有一个#时,C ++预处理器会做什么?

  9. 9

    从C#中的方法返回值或错误消息的最佳实践是什么?

  10. 10

    C ++中主要函数返回值的约定是什么?

  11. 11

    C++17 中 std::vector::emplace_back 返回值的用例是什么?

  12. 12

    在 C++ 中使用 upcasting 和 downcasting 的原因是什么?

  13. 13

    有些人在目标C中使用GOTO语句的原因是什么?

  14. 14

    C:数据类型。sqrt函数与int一起工作的原因是什么?

  15. 15

    C程序中“异常程序终止”错误的可能原因是什么?

  16. 16

    C:这个浮点异常的原因是什么?

  17. 17

    C++ 程序输出与预期不同的原因是什么?

  18. 18

    在c++中使用一个函数的返回值作为另一个函数的参数

  19. 19

    如何在C中返回一个int值?

  20. 20

    C ++中的返回值

  21. 21

    有什么方法可以从Objective-C的块中返回值吗?

  22. 22

    为什么C#代码没有从存储过程中返回值

  23. 23

    调用存储过程时,在C#中获取返回值和一组记录

  24. 24

    只有一个变量正在打印C ++

  25. 25

    Visual C ++只有一个线程在工作(OpenMP)

  26. 26

    为什么即使在C ++ 20中std :: memcpy也不能成为constexpr的原因是什么?

  27. 27

    区分C中的返回值和错误

  28. 28

    在Word女士中,当只有一列时,会导致两个表并排出现的原因是什么?

  29. 29

    在c ++中随机生成一个数字,但只有某些倍数

热门标签

归档