令人好奇的人提供在我一直嘮叨:C++傳遞參考:如何使用調用堆棧?
考慮一下這個功能:
void add10(int& x) {
x += 10;
}
我用C編程很長一段時間,所以我很清楚這意味着什麼做到這一點:
void add10(int *x) {
(*x)+=10;
}
x的地址被壓入堆棧(以及返回地址,動態鏈接等),並且函數本身將其解引用。
但在第一種情況下調用堆棧如何使用?它僅僅是第二種情況的語法快捷方式嗎?
令人好奇的人提供在我一直嘮叨:C++傳遞參考:如何使用調用堆棧?
考慮一下這個功能:
void add10(int& x) {
x += 10;
}
我用C編程很長一段時間,所以我很清楚這意味着什麼做到這一點:
void add10(int *x) {
(*x)+=10;
}
x的地址被壓入堆棧(以及返回地址,動態鏈接等),並且函數本身將其解引用。
但在第一種情況下調用堆棧如何使用?它僅僅是第二種情況的語法快捷方式嗎?
沒有通用的答案,因爲它取決於編譯器 - 只要結果是正確的,它可以做任何想做的事情。
通常,它將以與指針相同的方式處理。另外,通常它會被內聯,因此沒有任何東西會進入堆棧(但是,它又取決於編譯器和上下文)
它僅僅是第二種情況的語法快捷方式嗎?
這是實現定義的。
通常是的,因爲引用在內部實現爲指針。
PS:您對第二種情況的說法遠沒有準確。你需要重新接近它。
同樣的事情:引用通常在內部實現爲指針。它主要是一個句法糖。 –
_「它僅僅是第二種情況的語法快捷方式嗎?」_這是實現定義的,不包含在C++標準中。 – user0042
[這是什麼](https://godbolt.org/g/mLS5cZ)關於將地址推入堆棧和所有內容? – chris