C ++通过引用传递:如何使用调用堆栈?

时间:2017-10-21 14:32:41

标签: c++ function pointers stack pass-by-reference

一直在唠叨我的好奇心:

考虑这个功能:

void add10(int& x) {
    x += 10;
}

我已经在C中编程了很长时间,所以我确切地知道这样做意味着什么:

void add10(int *x) {
    (*x)+=10;
}

x的地址被压入堆栈(连同返回地址,动态链接等),函数本身会取消引用它。

但是第一种情况下如何使用调用堆栈?它只是第二种情况的句法快捷方式吗?

2 个答案:

答案 0 :(得分:2)

没有通用的答案,因为它取决于编译器 - 它可以做任何想做的事情,只要结果是正确的。
通常,它将被视为与指针相同的方式。此外,通常情况下,它将被内联,因此堆栈中没有任何内容(但同样,它取决于编译器和上下文)

答案 1 :(得分:0)

  

它只是第二种情况的句法快捷方式吗?

这是实施定义。

通常是,因为引用在内部实现为指针。

PS:您对第二案例如何运作的说法远非准确。你需要重新接近它。