被命名的RVO的可笑性?

Sta*_*ked 3 c++ return-value-optimization

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

// Fetch 1 MB of data
void GetData(std::vector<char> & outData);
Run Code Online (Sandbox Code Playgroud)

1MB是夸大的,但我只是想说明最好避免不必要的副本.

如果我添加这个重载:

std::vector<char> GetData()
{
    std::vector<char> result;
    GetData(result);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

那么RVO有多大可能性呢?

Jer*_*fin 7

对于最合理的近期编译器(例如,VS 2005或更新版本,gcc 3.4或更新版本),它基本上是肯定的.我只说"最",因为我没有测试现有的每个编译器.我在过去5年左右看过的每一个新编译器都包含了它.