11得票1回答
理解C++11中的rvalue、移动语义和性能

可能重复: 如果我返回文字而不是声明的std :: string会发生什么? 考虑以下代码:string getName () { return "meme"; } string name = getName(); 函数getName()返回一个临时对象。在C++03中...

10得票1回答
C++中针对复杂用户定义类型的RVO

在我昨天的编程面试中,我必须编写一个程序,最终结果类似于这样: struct Blob { // basic field containing image blob statistics. }; std::vector<Blob> find_blobs (const I...

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

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

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

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

9得票3回答
RVO/NRVO和公共未定义复制构造函数 (注:该内容需要进一步完善,以便更好地理解上下文。)

我目前正在反对以下提案,我想知道针对它的法律和较小程度的道德论据,或者支持它的论据。 我们之前拥有的是: #include <vector> class T; class C { public: C() { } ~C( ) { /*something non...

9得票4回答
RVO应该在什么时候启动?

从以下代码中,如果发生了RVO,我期望看到两个地址指向同一位置,但事实并非如此(我的编译器是MS VC9.0) #include <iostream> #include <string> std::string foo(std::string& s) { ...

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

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

9得票2回答
使用函数返回值初始化对象时未调用拷贝构造函数

Consider the following code: #include <iostream> using namespace std; class A { public: int a; A(): a(5) { ...

9得票3回答
如何确定例程正在利用(N)RVO?

我希望我的程序可以尽可能地利用(N)RVO优化。除了解析生成的汇编代码外,是否有其他方法可以检查一个例程是否使用(N)RVO进行编译?目前,我主要关心的是MSVC和GCC。

8得票2回答
当RVO无法实现时,我们是否应该使用`std::move`?

众所周知,在函数返回值中应避免使用 std::move,因为它可能会阻止 RVO(返回值优化)。 我们感兴趣的问题是,如果我们确切地知道 RVO 不会发生该怎么办。 这是 C++14 标准的规定 [12.8/32]: 当满足复制/移动操作省略的条件时,但不适用于异常声明,并且要复制的对象...