C++传递参考:如何使用调用堆栈?
问题描述:
令人好奇的人提供在我一直唠叨:C++传递参考:如何使用调用堆栈?
考虑一下这个功能:
void add10(int& x) {
x += 10;
}
我用C编程很长一段时间,所以我很清楚这意味着什么做到这一点:
void add10(int *x) {
(*x)+=10;
}
x的地址被压入堆栈(以及返回地址,动态链接等),并且函数本身将其解引用。
但在第一种情况下调用堆栈如何使用?它仅仅是第二种情况的语法快捷方式吗?
答
没有通用的答案,因为它取决于编译器 - 只要结果是正确的,它可以做任何想做的事情。
通常,它将以与指针相同的方式处理。另外,通常它会被内联,因此没有任何东西会进入堆栈(但是,它又取决于编译器和上下文)
答
它仅仅是第二种情况的语法快捷方式吗?
这是实现定义的。
通常是的,因为引用在内部实现为指针。
PS:您对第二种情况的说法远没有准确。你需要重新接近它。
同样的事情:引用通常在内部实现为指针。它主要是一个句法糖。 –
_“它仅仅是第二种情况的语法快捷方式吗?”_这是实现定义的,不包含在C++标准中。 – user0042
[这是什么](https://godbolt.org/g/mLS5cZ)关于将地址推入堆栈和所有内容? – chris