在下面的陈述中,我有一个小小的疑问
int a = 5;
int* ptr = &a;
int &x = *ptr;
x = 3;
cout<<a;输出为3;*ptr将取消引用的整数vaue传递给引用引用&x,但是如何更改x更改a?*ptr刚刚抛出了一个pointing.How编译器将x绑定到a's地址的地址??
发布于 2020-04-23 10:40:47
在本声明之后
int* ptr = &a; 指针ptr指向对象a。
删除指针
int &x = *ptr;
生成对原始对象a的lvalue引用,
所以x现在是对对象a的lvalue引用。
其效果与您最初编写的一样
int &x = a;来自C++标准(5.3.1一元运算符)
1一元*操作符执行间接操作:应用它的表达式应该是指向对象类型的指针,或指向函数类型的指针,而结果是指向表达式所指向的对象或函数的lvalue。
发布于 2020-04-23 10:43:55
但是为什么改变x会改变一个?
您不能“更改”引用。当您分配给x时,x引用的对象将被赋值。x指的是a,所以x的赋值就是a的赋值。
编译器为什么将x绑定到一个地址??
如果指针ptr指向a,则通过指针*ptr的间接指向将产生一个引用a的lvalue。因此,如果使用这样的表达式初始化引用x,则引用将绑定到a。
发布于 2020-04-23 10:47:38
有一个很好的特性,你可以用C++。
你以前试过吗?
void somefunction(int &foo) {
foo = 3;
}当你像这样使用这个函数时:
int a = 5;
somefunction(a);
// From now on, a = 3A将将其值更改为3。
在您的代码中,您取消了值的引用,但同时也传递了一个到x。
当您传递对象时,它非常有用。你不想做像somefunction(&a)这样的事情。这样可以使您的代码更简洁。
对不起,我正在移动,我还不知道如何设置帖子的格式。
https://stackoverflow.com/questions/61385117
复制相似问题