问题标签 [return-by-value]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
427 浏览

c++ - 为什么非内置类型的按值返回应该是 const 而内置类型的返回不是 const?

GotW #6 Const-Correctness上的解决方案 4 和 5提到了这一点:

对于非内置返回类型,按值返回通常应该是 const ..


..因为 int 已经是一个右值并且放入 'const' 可能会干扰模板实例化并且会令人困惑、误导并且可能会变胖

我有以下问题

  1. 我们在这里干扰了哪个模板实例化?!
  2. 这里到底有什么误导,为什么?
  3. 为什么非内置和内置之间存在这种区别。我认为这是一个不好的做法!
0 投票
1 回答
250 浏览

c++ - 如何在 C++ 中从容器数组中输出动态数组值?

我将尝试首先解释我的情况。我有一个里面有结构的类和这个容器类的数组

对象的数组在某些函数文件中使用

我想不通的是如何处理objOfB. 有一个简单的例子,它将从开始到结束objOfB

我想在函数文件中执行这个循环,但我想不出不会返回所有的方法objOfB(它用于循环的第一部分B *temp = objOfB;)。以下是我为执行此循环而创建的方法:

它是如何工作的,它可以在循环中使用:

但是我知道这三种方法都不适合这个循环。所以我需要一些方法来返回值,另一种方法来告诉应该读取下一个值......希望不是更清楚我想要实现的目标。

如何使用方法传递结构值的容器类动态数组?

0 投票
3 回答
457 浏览

c++ - 强制 const 存储按值返回的值

这就是我想要完成的事情:

编译器接受所有四个 return* 调用。我知道在第三次调用中构造了对象的副本,但我想强制调用者returnconst将值存储为const. 有解决方法吗?

0 投票
4 回答
211 浏览

c++ - 函数实际上是如何按值返回的?

如果我有一个 A 类(它按值返回一个对象),并且两个函数 f() 和 g() 仅在它们的返回变量上有所不同:

现在当我执行 line 时A b = f(a);,它​​输出:

copy-constructor, constructor, f, destructor, 假设 f() 中的对象 y 是直接在目标(即对象 b 的内存位置)创建的,并且不涉及临时对象,这很好。

当我执行 line 时A c = g(a);,它​​输出:

copy-constructor, constructor, g, copy-constructor, destructor, destructor,.

所以问题是为什么在 g() 的情况下不能直接在 c 的内存位置创建对象,就像调用 f() 时发生的那样?为什么它在第二种情况下调用一个额外的复制构造函数(我认为这是因为临时的参与)?

0 投票
3 回答
238 浏览

c++ - In c++11, is there ever still a need to pass in a reference to an object that will accept the output of a function?

Prior to C++11, if I had a function that operated on large objects, my instinct would be to write functions with this kind of prototype.

(Here, return_value is just a blank object which will receive the output of the function. A is just some class which is large and expensive to copy.)

In C++11, taking advantage of move semantics, the default recommendation (as I understand it) is the more straightforward:

Is there ever still a need to do it the old way, passing in an object to hold the return value?

0 投票
1 回答
115 浏览

c++ - 按值返回时复制构造函数的奇怪行为

我使用按值返回对象的函数测试了复制构造函数的行为,我遇到了复制构造函数确实被调用的情况和没有被调用的情况。

请考虑以下代码:

的输出main是:

如您所见,当我声明一个本地对象并返回它时,不会调用复制构造函数,而不是返回一个调用复制构造函数的给定引用对象。

有人对此有解释吗?一般来说,从按值返回的函数调用复制构造函数的情况有哪些?

谢谢!

0 投票
2 回答
467 浏览

java - 对象属性的 Java 值传递解决方法

在我的 Java 源代码的一种方法中,相同的代码块出现了很多次:

这段代码的作用是找出对象的哪个属性应该是代码的目标。更具体地说,在块的开头我们有一个字符串“Object.property”,代码的任务是解析它,以便找出“Object”是什么类型的对象,以及“Object”的什么属性” “财产”是。当这完成并且块结束时,执行继续对所述对象的所述属性做一些事情。该属性可以用于比较,或者可以为其分配一些东西。

现在,我的问题是我想通过将这个块放在另一个方法中来稍微整理一下代码,然后我可以多次调用它。此外,如果我在这个块中发现了一个错误,我不需要经历每一次出现来修复它 - 只需一种方法。

所以这基本上是我想要做的:

现在,由于 Java 没有任何指针,我不能例如从这个新方法返回一个整数属性。将返回该整数的副本(按值传递),我的所有其余代码将处理属性的本地整数副本,而不是属性本身。如果仅在比较中使用该属性,这当然很好,但是当我的其余代码想要为它分配一些东西时,事情就不再起作用了。

是否有一种聪明而简单的解决方法,以便我可以缩短我的 Java 代码,并且在修改它时,我只需要修改代码的一部分?

编辑:

为了给你一些真实的代码,代码块可能看起来像这样,当它没有放在不同的方法中时,在它得到一个名为 toParse 的字符串(对于这个例子来说,它可能是“niceShirt.size”):

现在因为这样的代码多次出现,我很想有一个这样的方法:

在我的其余代码中,我需要做的就是:

..但这不起作用,因为 parse(toParse) 现在是一个副本,一个按值返回,所以它不会对对象的真实属性做任何事情。

我希望这有助于澄清问题?

0 投票
1 回答
1549 浏览

c# - 使方法按值返回对象?

我有一本这样的字典:Dictionary<string, SomeClass> template

基本上,我想要做的是获取包含template. 但是,我似乎无法创建一个按值检索对象的方法。我知道refout,但这些与我想要的完全相反。结构将是完美的,但不幸的是,SomeClass必须从另一个类和/或接口继承。

有什么方法可以做我想做的事吗?这看起来应该很简单。

0 投票
5 回答
21873 浏览

c++ - 使用对象进行 C++ 深度复制

早上好。我无法理解在共享项目中使用 C++ 中的对象进行深浅复制背后的逻辑,因此我创建了以下示例。

现在给定对象b类函数如下:

数据访问器在类 def 中就是这样的,

我有几个由此产生的问题。

1) 由于在对象 b 中,数据成员被声明为

而不是作为

为什么数据成员被访问为

而不是作为

?

2)这是深拷贝还是浅拷贝?

如果我遗漏了重要的部分,我深表歉意。我不是一个程序员,所以这样的事情很容易让我感到困惑。文学让我更加困惑。感谢您的时间。

0 投票
2 回答
2519 浏览

c++ - 引用 C++ 中函数返回的向量元素

有人可以验证以下是BUG,并解释原因吗?我想我知道,但不清楚细节。(我的实际问题涉及枚举向量,而不是整数,但我认为这无关紧要。)假设我有以下代码:

我是否正确 myIntRef 立即是一个悬空引用,因为 f 的返回值没有保存在堆栈上的任何地方?

另外,以下是有效的修复,还是仍然是错误?

也就是说,f()的返回结果是不是在第0个元素被复制之前就被扔掉了?