MST
星途 面试题库

面试题:C++常引用在返回值中的基本运用

请编写一个C++函数,该函数返回一个类对象的常引用。类中有一个int成员变量,函数的作用是返回类对象,且这个对象的成员变量值是传入参数的平方。请详细说明为什么使用常引用返回,以及这样做的优缺点。
20.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

class MyClass {
public:
    int value;
    MyClass(int val) : value(val) {}
};

const MyClass& createSquaredObject(int num) {
    static MyClass obj(num * num);
    return obj;
}

为什么使用常引用返回

  1. 避免不必要的拷贝:如果直接返回对象,会调用拷贝构造函数创建一个临时对象,而使用引用返回可以避免这种额外的开销,提高效率。
  2. 保持对象的常量性:使用const修饰引用,表明返回的对象不会被修改,这在一些场景下可以保证数据的安全性和一致性。

优点

  1. 提高效率:避免了对象的拷贝,对于大型对象或拷贝构造函数开销较大的对象,性能提升明显。
  2. 保证数据安全const引用确保返回的对象不会被意外修改,符合函数功能(只是返回一个计算结果对象,不应被修改)。

缺点

  1. 生命周期问题:如上述代码中,使用static对象来确保返回对象的生命周期,但static对象有全局生命周期,可能会一直占用内存直到程序结束。如果返回的是局部对象的引用,则会导致悬空引用,程序运行时会出错。
  2. 不能返回临时对象:常引用不能绑定到临时对象的场景下,这种返回方式会受限。例如函数返回一个由局部变量构建的临时对象然后通过常引用返回,这是不允许的(因为临时对象在函数结束时就销毁了)。