参考lhs和rhs在C++中的差异

Ste*_*eve 3 c++ reference

我正在学习C++,我发现当参考文献位于右侧时,可能有两种情况.假设我有一个方法:

int& GetMe(int& i) { return i; }
Run Code Online (Sandbox Code Playgroud)

我有:

(1) int j; GetMe(j) = GetMe(i);

(2) int& k = GetMe(i);

(1)和(2)的后果是不同的.在(1)中,语义是复制iinto 的值j.地址ij保持不变.改变i根本不会影响j.实际上,当您重载索引运算符[]并使用索引运算符进行赋值时就是这种情况.在(2)中,语义是创建ias 的指示对象k.k具有相同的地址i和改变i影响k.

那么为什么我们有差异呢?我认为,在C++中,引用的地址只确定一次.一旦确定了引用的地址,就不能在以后更改它.在(1)中,引用j是在之前确定的,因此动作是将值复制ij.在(2)中,k正在声明和初始化引用,因此使用引用来完成i.所以动作就是参考初始化.

我没有找到明确说明上述内容的材料,所以我想要确认.任何人都知道C++中的参考资料必须能帮助我或指出我清楚材料.非常感谢您的进步.

vav*_*ava 5

你在这里缺少的是变量的类型是不同的,这一切都很重要.在第一个例子中,你有int j第二个 - int &k.

函数原型中的引用存在于不同的理由中,它们看起来相同,在它们之下它们几乎相同但它们使用的方式不同,因为它们仅在方法执行时才存在.

实际上,您的代码完全遵循

int j;
int & j1 = j;
int & i1 = i;
j1 = i1;
Run Code Online (Sandbox Code Playgroud)

int & i1 = i;
int & k = i1;
Run Code Online (Sandbox Code Playgroud)

很容易看出,在第一种情况下,两个引用实际上引用了不同的变量,即内存中的不同部分,但在第二种情况下,它们都引用完全相同的变量.因此差异.