什么是cpp中的引用含义

时间:2015-11-15 16:12:20

标签: c++ reference

我对以下代码的输出感到困惑

#include <iostream>

using namespace std;

int main()

{
int i;
double d;

int r=i;
double s=d;

i=5;
cout<<"value of i:"<<i<<endl;
cout<<"value of i reference:"<<r<<endl;

d=11.7;
cout<<"value of d:"<<d<<endl;
cout<<"value of d reference:"<<s<<endl;

cin.ignore();
return 0;

}

输出如下 i的值:5 值的参考:4370436 d值:11.7 d参考值:1.78734e-307

我实际上并不知道为什么i reference和d reference的值是这样的。我知道如果我添加&#34;&amp;&#34;对于i和d引用的定义,它将作为参考。但我想我不完全理解参考的含义。任何人都可以解释为什么在这段代码中输出是这样的。非常感谢!

2 个答案:

答案 0 :(得分:0)

您的代码中没有引用。

rs具有未指定的值,因为id(尚未初始化)也在您执行复制初始化时执行。关键是复制初始化就是: copy

例如,r是一个新的,独立的,无关的整数 - 在初始化时 - 当时采用i 的值。那就是它! r没有&#34;关注&#34;更改为i

的值

你似乎至少部分地理解,正如你的矛盾陈述&#34;我知道如果我将&添加到i和d引用的定义中,那么它将作为参考和#34工作; 至少表明您知道&与引用有关。实际上,使用int / double类型而不是类型int& / double&意味着您的对象目前不是所有。< / p>

答案 1 :(得分:0)

由于@Lightness Races in Orbit解释了输出,因此在初始化 i 之前,您将 i 的值复制到 r 。在 main 函数中声明 i 之后,它具有垃圾值,您将该垃圾值分配给 r

我已经编辑了你的代码,并添加了对它的引用来解释引用:

#include <iostream>

using namespace std;

int main()

{
int i;

int &r=i;

i=5;
cout<<"value of i:"<<i<<endl;
cout<<"value of i reference:"<<r<<endl;
r = 6; // See this
cout<<"value of i:"<<i<<endl;// Value of i also becomes 6
i = 9;
cout<<"value of i reference:"<<r<<endl;// Value of r also becomes 9

cin.ignore();
return 0;

}

现在输出是:

value of i:5
value of i reference:5
value of i:6
value of i reference:9

此处, r 是对 i 的引用。 r i 都指向同一个变量。这就像为同一个人有两个名字。如果您对其中任何一个进行某些操作,更改也会反映到其他操作上。更改 r i 的值后,请参阅输出。