面试题答案
一键面试- 引用绑定的基本规则:
- 引用必须在声明时初始化,一旦初始化后,就不能再绑定到其他对象。例如:
int num = 10; int& ref = num; // 正确,ref 绑定到 num // int& ref2; // 错误,引用未初始化
- 引用类型必须与所绑定对象的类型严格匹配(除了存在类型转换的特殊情况,如从派生类到基类的转换等,这里暂不考虑)。例如:
int num = 10; double& ref = num; // 错误,类型不匹配,不能将 int 类型绑定到 double&
- 引用绑定到普通变量:
在上述代码中,#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; }
ref
是num
的引用,对ref
的修改会直接影响num
,因为它们指向同一个内存位置。 - 引用绑定到常量变量:
这里#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;
是错误的。