MST

星途 面试题库

面试题:C++函数返回引用的基础应用

请编写一个C++函数,该函数接收两个整数的引用作为参数,比较它们的大小并返回较大值的引用。同时,请解释在这种场景下使用返回引用的好处和可能存在的风险。
17.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

int& findLarger(int& a, int& b) {
    return (a > b)? a : b;
}

使用返回引用的好处

  1. 效率高:返回引用避免了对返回值进行拷贝构造,尤其是对于大对象,性能提升显著。在上述代码中,如果int类型对象较大,返回引用可以节省拷贝的开销。
  2. 可修改返回值:调用者可以通过返回的引用直接修改被引用的对象。例如:
int main() {
    int num1 = 5;
    int num2 = 10;
    int& larger = findLarger(num1, num2);
    larger = 20; // 这里直接修改了num2的值
    std::cout << "num1: " << num1 << ", num2: " << num2 << std::endl;
    return 0;
}

可能存在的风险

  1. 悬空引用:如果返回的是局部变量的引用,当函数结束时,局部变量的生命周期结束,引用将指向无效内存,导致悬空引用。例如:
int& badFunction() {
    int localVar = 10;
    return localVar; // 错误,返回局部变量的引用
}
  1. 隐藏的修改:调用者可能在不知道的情况下修改了被引用的对象,这可能导致代码逻辑出现难以调试的错误,因为修改操作可能在远离实际对象定义的地方发生。