-4

我试图理解这段代码:

int& getInt()
{
    static int i = 5;
    return i;
}

int main()
{
    int a = getInt(); // function return variable by reference,but `a` is a copy of the variable returned by function
    int& aa = getInt(); // `aa` is a reference of the variable returned by function

}

你能解释一下吗?

4

2 回答 2

2

a是一个正常的非参考变量。所以分配看起来像

value_type = reference_type

getInt这只是将(因此,的值)的返回所引用的值i复制到a.

在第二种情况下,您正在使用引用创建引用,该引用“复制”引用并aa指向static i.


有趣的是,使用用户类而不是内置类型可能更容易理解,因为您可以自己指定所有构造函数并跟踪它们。在这种情况下,一个复制构造函数,通常看起来像:

class A { public: A(A const& a); };

在创建类型 A 的新值时调用。在第二种情况下,没有新的值出现,我认为这是理解这个例子的关键。

于 2013-09-25T10:17:06.240 回答
0

在第一种情况下,int a;它正在接收静态 i 的地址,这在这里没有用,但是在第二种情况下 aa 是地址类型,或者我们可以说它也是引用类型,因此它可以获取地址并且值很容易被它访问。但如果是一个; 值实际上并不存在于 a, 中,它通过 & 指向 I。但在第二种情况下,它实际上存在于 &aa。

于 2013-09-25T11:52:52.620 回答