首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命名RVO的可能性?

命名RVO的可能性?
EN

Stack Overflow用户
提问于 2010-08-17 05:03:15
回答 5查看 292关注 0票数 3

我有一个函数,看起来像这样:

代码语言:javascript
复制
// Fetch 1 MB of data
void GetData(std::vector<char> & outData);

1MB被夸大了,但我只想指出,最好避免不必要的副本。

如果我添加这个重载:

代码语言:javascript
复制
std::vector<char> GetData()
{
    std::vector<char> result;
    GetData(result);
    return result;
}

那么,RVO发挥作用的可能性有多大?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-08-17 05:07:10

对于最新的编译器(例如,VS2005或更高版本,gcc 3.4或更高版本),这基本上是肯定的。我之所以说“最多”,是因为我没有测试过现有的每一个编译器。大概在过去的5年左右,我看到的每一个新的编译器都包含了它。

票数 7
EN

Stack Overflow用户

发布于 2010-08-17 05:23:07

RVO很可能会发挥作用,因为它是一个非常简单的优化,已经存在了很长一段时间。然而,为了使这段代码在即使是中等高性能的代码中也具有实际的实用价值,您需要使用NRVO。NRVO更难遇到,因为它是相对较新的。然而,它是可用的。举个例子,MS编译器从VS2005开始就实现了它。

票数 3
EN

Stack Overflow用户

发布于 2010-08-17 05:08:14

我不认为有任何标准的答案:这取决于你的编译器和它的能力。

如果为了方便起见,您正在考虑实现这一点,为什么不尝试一下您的编译器,或者查看程序集,或者分析它,看看会发生什么?关于编译器实际做什么的经验证据可能比猜测一些编译器可能做什么或不可能做什么要好得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3497329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档