设置对第二个变量的引用

时间:2013-01-13 21:00:16

标签: c++ reference

我期待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;
}

3 个答案:

答案 0 :(得分:7)

  

显然,我的c = b行没有将c指定为b的别名?

确切地说,C ++中的引用不能重新安装c始终是对a的引用。

c = b只是一个简单的任务。

答案 1 :(得分:6)

您无法重置参考文献 - 您的c = b;行只会将c(以及a)分配给b的当前值。

当您将100分配给c时,b因此不会更改,因此当您将其打印出来时,它的原始值仍为12。< / p>

请参阅此常见问题解答:

http://www.parashift.com/c++-faq/reseating-refs.html

答案 2 :(得分:2)

c = b实际上做了以下事情:

  1. c是对a的引用,因此我们在c上请求的任何操作都将在a上实际运行。
  2. 我们正在分配给c - 这意味着,我们必须实际分配给a
  3. aint类型的左值,因此为其分配b会将a的值更改为此时b的值b。 (对于类类型对象,这将调用复制赋值运算符。)
  4. 12的值为a,因此我们将此值提供给c
  5. 就是这样。对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}}

    将输出您对程序的期望。