C++中引用看似可重绑定?测试代码运行引发疑问
为什么你的代码看起来像引用重绑定,实际却不是?
首先明确:C++里的引用一旦绑定到某个变量,就绝对不能再切换绑定到其他变量,它从始至终都是原变量的“别名”。
你代码里的关键误解出在这一行:
ref = b;
这行代码不是把ref重新绑定到b,而是把b的值赋值给ref所代表的变量——也就是a。
你可以修改代码验证这个结论:
#include <iostream> using namespace std; int main() { int a = 0; int b = 1; int& ref{a}; ref = b; cout << ref << endl; // 输出1 cout << a << endl; // 同样输出1,说明a被修改了 cout << b << endl; // 输出1,b的值没变 return 0; }
输出结果会是三个1,这说明ref依然是a的别名,ref = b只是把a的值改成了b的值,根本没改变引用的绑定关系。
如果真需要能切换指向的“类似引用”的东西,应该用指针:
int* ptr = &a; ptr = &b; // 这才是真正切换指向,此时ptr指向b
内容的提问来源于stack exchange,提问作者AmiguelS
相关产品推荐
相关产品推荐

