函数返回值避免对象拷贝
【说明】 使用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;
}
父主题: 函数设计