我正在学习C++,我发现当引用在右手边时,可以有两种情况。假设我有一个方法:
int& GetMe(int& i) { return i; }
我有:
(1) int j; GetMe(j) = GetMe(i);
和
(2) int& k = GetMe(i);
(1)和(2)的结果是不同的。在(1)中,语义是将i
的值复制到j
中。 i
和j
的地址保持不变。更改 i
根本不会影响 j
。实际上,当您重载索引运算符 [] 并使用索引运算符进行赋值时就是这种情况。在 (2) 中,语义是将 i
的指代创建为 k
。 k
与 i
具有相同的地址,更改 i
会影响 k
。
那么为什么我们会有差异呢?我认为,在 C++ 中,引用的地址只确定一次。一旦确定了引用的地址,以后就永远无法更改。在(1)中,j
的引用是之前确定的,所以 Action 是将值从i
复制到j
。在 (2) 中,k
的引用被声明和初始化,因此它是使用 i
的引用完成的。所以 Action 是引用初始化。
我没有找到明确说明以上内容的 Material ,所以我想确认一下。任何人都知道 C++ 中的引用必须可以帮助我或指出我清晰的 Material 。非常感谢您。
最佳答案
您在这里缺少的是变量类型不同,这才是最重要的。在第一个示例中,您有 int j
,在第二个示例中 - int &k
。
函数原型(prototype)中的引用存在于不同的基础上,它们看起来相同,在底层它们几乎相同但它们的使用方式不同,因为它们仅在方法执行时存在。
实际上,您的代码完全遵循
int j;
int & j1 = j;
int & i1 = i;
j1 = i1;
对比
int & i1 = i;
int & k = i1;
很容易看出,在第一种情况下,两个引用实际上引用了不同的变量,即内存中的不同部分,但在第二种情况下,它们都引用了完全相同的变量。因此存在差异。
关于c++ - C++ 中 lhs 和 rhs 区别的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522912/