我想了解这段代码:
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
}
请你解释一下吗?
答案 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。