如果我想调用 Bar() 而不是 Foo()Bar() 是否返回 Foo() 返回内容的拷贝(额外开销),或者返回与 Foo() 放在临时堆栈上的对象相同的对象?

vector<int> Foo(){
    vector<int> result;
    result.push_back(1);
    return result;
}
vector<int> Bar(){
    return Foo();
}

最佳答案

两者都可能发生。但是,大多数编译器不会在优化后立即进行复制。

您的代码表明应该有一个拷贝。但是,允许编译器删除任何不改变语义和程序的拷贝。

注意:这就是为什么你永远不应该有一个复制构造函数,它除了正确复制之外什么都不做,因为你永远无法确定复制是否会被实际完成。

关于c++ - 函数返回另一个函数的返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/166113/

10-12 07:32
查看更多