鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

函数返回值避免对象拷贝

【说明】 使用pass-by-value方式返回非内置类型对象时,可能引发对象拷贝,影响性能,应该权衡这种设计。

【原理】 函数以值传递方式返回结构/对象可能引发临时对象创建和移动或拷贝构造函数发生。一般性,copy elision和return value optimization已经是现代编译器常见编译优化技术,但某些场景下,未必可以触发拷贝消除。值得注意的是,C++17标准强制要求编译器对return操作数和返回类型为同一类型的纯右值时,不能产生复制/移动构造。

【注意事项】 不涉及

【案例】

一种常见的场景见如下,Foo()的返回值可以产生复制消除优化,而Bar()不行。
Object Foo() {
    Object obj;
    return obj;
}

Object Bar() {
    Object obj1;
    Object obj2;
    return cond ? obj1 : obj2;
}

int main() {
    Object o;
    o = Foo();
    return 0;
}