鉴于:
int i = 42;
int j = 43;
int k = 44;
通过查看变量地址,我们知道每个变量占用 4 个字节(在大多数平台上)。
但是,考虑到:
int i = 42;
int& j = i;
int k = 44;
我们将看到变量 i
确实占用了 4 个字节,但 j
没有 占用,而 k
再次占用堆栈上的 4 个字节。
这里发生了什么?看起来 j
在运行时根本不存在。我作为函数参数收到的引用呢?这 必须 在堆栈上占用一些空间……
当我们这样做时 - 为什么我不能定义一个数组或引用?
int&[] arr = new int&[SIZE]; // compiler error! array of references is illegal
原文由 Yuval Adam 发布,翻译遵循 CC BY-SA 4.0 许可协议
在遇到引用 j 的任何地方,它都会被 i 的地址 替换。所以基本上引用内容地址是在编译时解析的,不需要在运行时像指针那样解引用。
_只是为了澄清我所说的 i 的地址是什么意思_:
在上面的代码中, j 不应该在 主堆栈 上占据空间,但 函数 的引用 x 将在其堆栈上占据一个位置。这意味着当以 j 作为参数调用 function 时, i 的地址 将被压入 function 的堆栈中。编译器可以也不应该在 主堆栈 上为 j 保留空间。
对于数组部分,标准说::
为什么引用数组是非法的?