2017-10-21 78 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:您對第二種情況的說法遠沒有準確。你需要重新接近它。