我期待b的值低于100,但我得到12.为什么会这样?很明显,我的c = b
行没有将c指定为b?
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a = 4;
int b = 12;
int& c = a;
c = 8;
cout << a << endl;
c = b;
c = 100;
cout << b << endl;
int bb;
cin >> bb;
return 0;
}
答案 0 :(得分:7)
显然,我的
c = b
行没有将c
指定为b
的别名?
确切地说,C ++中的引用不能重新安装。 c
始终是对a
的引用。
c = b
只是一个简单的任务。
答案 1 :(得分:6)
您无法重置参考文献 - 您的c = b;
行只会将c
(以及a
)分配给b
的当前值。
当您将100
分配给c
时,b
因此不会更改,因此当您将其打印出来时,它的原始值仍为12
。< / p>
请参阅此常见问题解答:
答案 2 :(得分:2)
c = b
实际上做了以下事情:
c
是对a
的引用,因此我们在c
上请求的任何操作都将在a
上实际运行。c
- 这意味着,我们必须实际分配给a
。a
是int
类型的左值,因此为其分配b
会将a
的值更改为此时b
的值b
。 (对于类类型对象,这将调用复制赋值运算符。)12
的值为a
,因此我们将此值提供给c
。就是这样。对a
所指的内容没有任何改变:先前为a
,之后为a
,只有c
现在有不同的值。
显然你希望重新设置b
,然后引用#include <iostream>
int main() {
int a = 4;
int b = 12;
int* c = &a;
*c = 8;
std::cout << a << std::endl;
c = &b;
*c = 100;
std::cout << b << std::endl;
return 0;
}
。好吧,你不能用C ++引用做到这一点,IMO这是一件好事。但你可以用指针做到这一点:
{{1}}
将输出您对程序的期望。