MST

星途 面试题库

面试题:C++中函数返回常量引用优化的基本场景

请举例说明在什么样的C++程序场景下,使用函数返回常量引用能够带来性能优化?并写出简单的代码示例,解释代码中优化的原理。
41.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

场景

在返回对象较大且不希望发生对象拷贝时,使用函数返回常量引用能带来性能优化。比如返回一个较大的数组对象或者复杂自定义类对象时,若直接返回对象会进行拷贝构造,消耗额外的时间和空间,而返回常量引用避免了这种拷贝。

代码示例

#include <iostream>
#include <vector>

class BigData {
public:
    std::vector<int> data;
    BigData() {
        for (int i = 0; i < 10000; ++i) {
            data.push_back(i);
        }
    }
};

const BigData& getBigData() {
    static BigData data;
    return data;
}

int main() {
    const BigData& result = getBigData();
    // 这里可以使用result进行相关操作,比如访问result.data
    return 0;
}

优化原理

  1. 避免拷贝:如果函数getBigData返回的是BigData对象而不是常量引用,在调用getBigData()时会调用拷贝构造函数创建一个临时对象,然后将这个临时对象赋值给result。而返回常量引用,result直接引用了函数内的静态对象data,避免了拷贝构造和析构临时对象的开销,从而提升性能。
  2. 静态对象生命周期:这里返回的是静态对象的引用,保证在函数调用结束后对象依然存在,且通过常量引用避免了对该对象的意外修改。