7得票1回答
从std::tuple解包的返回值优化

是否有编译器能够对通过std::tuple从函数返回的多个值执行返回值优化?为了清楚起见,在下面的代码中,是否有任何编译器能够避免不必要的复制? std::vector<int> a; std::list<float> b; std::tie(a,b) = myFun...

68得票2回答
为什么使用std::move会阻止返回值优化(RVO)?

在很多情况下,当从函数中返回一个本地对象时,会触发RVO(返回值优化)。然而,我认为明确使用std::move至少可以强制执行移动语义,即使RVO没有发生,但是只要可能,RVO仍然会被应用。然而,事实似乎并非如此。#include "iostream" class Hea...

22得票9回答
C++:返回引用和复制构造函数

在C++中,引用让我感到困惑。 :) 基本思路是我正在尝试从函数返回一个对象。如果可能的话,我希望不返回指针(因为那样我将不得不手动 delete 它),也不调用复制构造函数(为了提高效率自然添加:并且因为我想知道是否可以避免编写复制构造函数)。 所以,总的来说,这是我发现的做到这一点的...

9得票4回答
通过返回值还是修改传递的参数引用来实现,哪种方式更快?

在我撰写的程序中,我需要在函数间传递大型数据结构(图片)。 我需要尽可能快地编写代码,并在不同的操作系统上使用(因此,我无法针对所有测试用例进行分析)。 我经常写以下形式的代码... void foo() { ImageType img = getCustomImage(); } Im...

75得票2回答
C中的返回值优化和复制省略

有些人可能不知道在C语言中可以通过值传递结构体并返回结构体。我的问题是当在C语言中返回结构体时,编译器是否会进行不必要的复制。C语言编译器(例如GCC)是否使用返回值优化(RVO)优化?还是这只是C++中的概念?我所读到的关于RVO和拷贝省略的所有内容都是关于C++的。 让我们考虑一个例子。...

24得票1回答
在多个返回语句的情况下,使用`std::move`返回是否明智?

我知道通常不建议使用std::move返回值,即bigObject foo() { bigObject result; /*...*/ return std::move(result); } 不是简单地bigObject foo() { bigObject result; /*...*/ re...

10得票3回答
在C++/C++11中,哪种“返回”大数据的方法更好?

这个问题是由于对C++11中的RVO(返回值优化)产生困惑而引起的。 我有两种方法来“返回”值:通过值返回和通过引用参数返回。如果我不考虑性能,我更喜欢第一种方法。因为通过值返回更自然,并且我可以轻松区分输入和输出。但是,如果考虑返回大量数据时的效率,我就无法决定了,因为在C++11中,有R...

16得票4回答
RVO在对象成员上是否有效?

考虑以下内容: struct A { /* ... */ }; A foo() { auto p = std::make_pair(A{}, 2); // ... do something return p.first; } auto a = foo(); p.first...

9得票3回答
返回时使用STL交换?

抱歉这个问题有点长,但我会尽可能的说清楚。这个问题与我之前关于C++的字符串相关的问题(strings in C++)有关。 我正在试图找出如何在不依赖NRVO的情况下从函数中返回std::string并且不产生多余的内存分配。 我不想依赖NRVO的原因是: 我们当前使用的编译器不支持它 ...

8得票4回答
复制构造函数 vs 返回值优化

在之前的问题中,似乎一个普通的按值返回函数总是将其return参数复制到被分配的变量中。 这是否符合标准要求,或者该函数能否通过在函数体内构造“被分配到”的变量来进行优化? struct C { int i; double d; }; C f( int i, int d ) { ...