我有一个函数,看起来像这样:
// Fetch 1 MB of data
void GetData(std::vector<char> & outData);1MB被夸大了,但我只想指出,最好避免不必要的副本。
如果我添加这个重载:
std::vector<char> GetData()
{
std::vector<char> result;
GetData(result);
return result;
}那么,RVO发挥作用的可能性有多大?
发布于 2010-08-17 05:07:10
对于最新的编译器(例如,VS2005或更高版本,gcc 3.4或更高版本),这基本上是肯定的。我之所以说“最多”,是因为我没有测试过现有的每一个编译器。大概在过去的5年左右,我看到的每一个新的编译器都包含了它。
发布于 2010-08-17 05:23:07
RVO很可能会发挥作用,因为它是一个非常简单的优化,已经存在了很长一段时间。然而,为了使这段代码在即使是中等高性能的代码中也具有实际的实用价值,您需要使用NRVO。NRVO更难遇到,因为它是相对较新的。然而,它是可用的。举个例子,MS编译器从VS2005开始就实现了它。
发布于 2010-08-17 05:08:14
我不认为有任何标准的答案:这取决于你的编译器和它的能力。
如果为了方便起见,您正在考虑实现这一点,为什么不尝试一下您的编译器,或者查看程序集,或者分析它,看看会发生什么?关于编译器实际做什么的经验证据可能比猜测一些编译器可能做什么或不可能做什么要好得多。
https://stackoverflow.com/questions/3497329
复制相似问题