gpt4 book ai didi

java - 返回在各种语言的函数中创建的数组和对象

转载 作者:太空宇宙 更新时间:2023-11-04 01:03:47 25 4
gpt4 key购买 nike

我对函数调用中本地创建的返回数组和对象感到有点困惑。所以我相信 -

  1. C - 没有对象,只能在堆栈上创建数组和结构,因此在函数返回时将被删除。因此将它们作为返回值发送给调用模块是不明智的。

  2. C++ - 对象和结构驻留在堆中,因此可以返回对象但没有别的,即数组在返回时仍会被销毁

  3. Java - 我可以返回数组和对象,我想数组移到了这里的堆?

  4. Python - 与 Java 相同,本地创建的对象和数组可以作为引用返回给调用模块。

如有不对请指正。现在为什么 java/python 将数组放在堆中?被解释语言是这个原因吗?因此,每种编译语言都不会让我将本地创建的数组返回给调用模块。

提前致谢。

最佳答案

  1. C 有对象,例如结构的实例。您可以从函数安全地返回它们,前提是它们没有引用函数局部变量的数据成员。您不能返回数组,因为它们不可复制。但是您可以安全地返回具有数组数据成员的结构,在这种情况下,数组会被复制。

  2. 与 C 相同。对象是结构或内置函数的实例。 结构 相同。它们是否在“堆”上取决于您如何实例化它们(这在 C 中完全相同。)唯一的区别是 C++ 有 return value optimization (RVO)这允许在许多情况下省略拷贝。

  3. 我不确定返回数组的确切语义,但 Java 具有引用语义,因此对象的生命周期通常超过其作用域。

  4. 类似于 Java。生命周期不受范围限制,因此从函数返回任何类型的对象都没有问题。

关于java - 返回在各种语言的函数中创建的数组和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29048568/

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