MST

星途 面试题库

面试题:C++ 中按引用传递时引用绑定的基本规则

请阐述在 C++ 中按引用传递参数时,引用绑定的基本规则有哪些?并举例说明引用绑定到不同类型变量(如普通变量、常量变量)的情况。
26.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 引用绑定的基本规则
    • 引用必须在声明时初始化,一旦初始化后,就不能再绑定到其他对象。例如:
    int num = 10;
    int& ref = num; // 正确,ref 绑定到 num
    // int& ref2; // 错误,引用未初始化
    
    • 引用类型必须与所绑定对象的类型严格匹配(除了存在类型转换的特殊情况,如从派生类到基类的转换等,这里暂不考虑)。例如:
    int num = 10;
    double& ref = num; // 错误,类型不匹配,不能将 int 类型绑定到 double&
    
  2. 引用绑定到普通变量
    #include <iostream>
    int main() {
        int num = 10;
        int& ref = num;
        std::cout << "num: " << num << ", ref: " << ref << std::endl;
        ref = 20;
        std::cout << "After modifying ref, num: " << num << ", ref: " << ref << std::endl;
        return 0;
    }
    
    在上述代码中,refnum 的引用,对 ref 的修改会直接影响 num,因为它们指向同一个内存位置。
  3. 引用绑定到常量变量
    #include <iostream>
    int main() {
        const int num = 10;
        const int& ref = num;
        std::cout << "num: " << num << ", ref: " << ref << std::endl;
        // ref = 20; // 错误,ref 绑定到常量,不能修改
        return 0;
    }
    
    这里 ref 绑定到常量 num,由于 num 是常量,所以通过 ref 也不能修改其值。同时,常量引用可以绑定到临时对象,例如:
    #include <iostream>
    int main() {
        const int& ref = 10; // 合法,常量引用可以绑定到临时对象(字面值 10)
        std::cout << "ref: " << ref << std::endl;
        return 0;
    }
    
    而普通引用不能绑定到临时对象,例如 int& ref = 10; 是错误的。