返回一个C ++引用变量

时间:2013-09-25 10:13:22

标签: c++

我想了解这段代码:

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

}

请你解释一下吗?

2 个答案:

答案 0 :(得分:2)

a是一个普通的非参考变量。所以赋值看起来像

value_type = reference_type

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

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


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

class A { public: A(A const& a); };
当创建类型A 的新值时,

被称为。在第二种情况下,没有新值出现,这是理解这个例子的关键,我认为。

答案 1 :(得分:0)

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