2017-10-21 80 views
2

令人好奇的人提供在我一直唠叨:C++传递参考:如何使用调用堆栈?

考虑一下这个功能:

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

我用C编程很长一段时间,所以我很清楚这意味着什么做到这一点:

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

x的地址被压入堆栈(以及返回地址,动态链接等),并且函数本身将其解引用。

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

+1

同样的事情:引用通常在内部实​​现为指针。它主要是一个句法糖。 –

+0

_“它仅仅是第二种情况的语法快捷方式吗?”_这是实现定义的,不包含在C++标准中。 – user0042

+2

[这是什么](https://godbolt.org/g/mLS5cZ)关于将地址推入堆栈和所有内容? – chris

回答

2

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

0

它仅仅是第二种情况的语法快捷方式吗?

这是实现定义的。

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


PS:您对第二种情况的说法远没有准确。你需要重新接近它。