问题标签 [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 回答
126 浏览

c++ - 当我从赋值运算符按值返回时,首先调用复制构造函数的机制和依据是什么?

考虑这段代码及其输出:

输出:

我知道从作业中返回的方法是通过引用,但我试图了解这是如何工作的,因为我是 C++ 的初学者。地址 0x7fff680e5a80 是什么?这是从哪里来的?哪个对象在这里调用复制构造函数?我希望你(地址 0x7fff680e5a90)调用它。

0 投票
4 回答
217 浏览

c++ - C++ 中的返回向量标准

现在,我知道这是一个常见问题,但我还没有真正找到一个直接的答案。这确实是一个关于标准的问题。我正在做一个涉及遗传算法的项目。但是在返回向量时我遇到了瓶颈。有没有“正确”的方法来做到这一点。通常我使用动态分配的数组,并返回一个指向新创建的数组的指针。

这样,一切都是高效的,并且没有数据复制。是否有等效于使用向量执行此操作的方法?这个向量中有对象,所以我想按值返回它会很慢。是通过引用传递“结果”向量的唯一解决方案吗?

而且,作为未来参考的旁注,在动态分配的数组上使用向量或其他 STL 容器是标准做法吗?动态分配的数组是否仅用作设计容器的低级工具?它们只是过去的遗物吗?

0 投票
2 回答
655 浏览

c++ - 按值返回是否意味着额外的副本和额外的开销?C++

考虑以下:

将构造多少个 Foo 类型的对象?

0 投票
1 回答
67 浏览

c++ - 按值从函数返回对象并在赋值/复制c'tor c ++中使用它

假设一个函数按值返回一个 A 类的对象。

假设我们稍后有一个分配/复制 c'tor:

是在分配/初始化之后调用返回对象的 d'tor 吗?

0 投票
1 回答
102 浏览

c++ - 为什么值返回的未命名对象在调用其转换运算符之前被破坏?

我有一个按值返回对象的函数。接收者变量需要调用该对象上的外向转换运算符。如果我在返回语句 (RVO) 中构造返回的对象,则在外向转换运算符之前调用其析构函数。但是,如果我命名对象并返回它,则在对象被破坏之前调用外向转换运算符。这是为什么?

输出是:

当 bar() 被调用时,引用在调用转换运算符之前被删除,并且它崩溃。另外,我不明白为什么在构建返回值时会调用 Ref 到 int* 的转换。

0 投票
1 回答
54 浏览

php - 从方法中通过引用返回数组是否更有效?

我有一个返回数组的函数。在 PHP 中,数组默认按值返回,除非使用了&运算符。我假设当按值从函数返回数组时会创建数组的副本。因此返回对数组的引用是否更有效?

0 投票
3 回答
5585 浏览

c++ - 什么更好:按值或常量引用返回 std::string?

这是一个具有两个具有不同返回类型的 getter 的类:

哪个更好?它是关于 std::string,而不是内置类型。STL 在https://channel9.msdn.com/Events/GoingNative/2013/Don-t-Help-the-Compiler中是否说最好按值返回,因为会优化多个副本?还是我对他的理解有误?

0 投票
2 回答
168 浏览

c++11 - 在没有复制构造函数的情况下返回对 *this 的引用?

我写了一个类似于以下的类:

如所写,g++ 无法在标记为“ERROR”的行编译它,声称它正在尝试使用(已删除)复制构造函数。但是,如果我用这个替换最后一个函数:

它编译没有错误。即使参考了许多文章、参考资料和其他 SO 问题,我也不明白:为什么第一个调用复制构造函数?移动构造函数还不够吗?

0 投票
2 回答
1050 浏览

c++ - 返回局部变量的引用

在下面的代码中,演示了两个函数。f1() 返回函数作用域内初始化局部变量的引用,f2() 返回函数作用域内初始化局部变量的值。

f2() 预计会很好地工作,因为本地初始化变量。值从堆栈传递到主堆栈。

f1() 预计不会起作用,因为局部变量的引用在函数范围之外是无用的。但是,这两个功能的输出似乎都可以。

这是测试代码;

输出如下;

为什么即使 f1() 返回局部变量的引用, f1() 也能正常工作?

0 投票
2 回答
8933 浏览

c++ - 运算符重载 C++ 引用或值

我看过很多教程,并试图在 stackoverflow 上找到答案,但没有成功。

我不确定的是;在重载运算符时,是否有一些实践何时按值或按引用返回?

例如

或相同的东西,但按价值

我想提一下,我注意到,在几乎 90% 的情况下,当返回同一个对象 ( *this) 时,会在返回的同一个对象上引用。有人可以解释为什么会这样吗?