[英]What is the difference when passing by reference between & and *?
聲明函數時,參數string*
和string&
什么區別? 我知道string s
會復制字符串s並通過值傳遞它,但是似乎在許多網站上,它們都引用string* s
和string& s
兩者都是通過引用傳遞。 我是C ++的新手,這是我唯一無法弄清楚的事情。 提前致謝 :)
通過指針string* s
傳遞的是地址,因此s
不是string
類型的,而是地址。 如果取消引用,則使用包括*s
在內的某些表達式,則*s
為字符串類型。
當通過引用string& s
傳遞時, s
是字符串類型的,因此不需要取消引用。
很多幾乎正確的答案。 許多對於特定的實現都是正確的,但是依賴於編譯器方面未指定的行為。
除了.
vs- ->
:
通常,語言規范對引用的描述很少,有意使編譯器作者在實現方面有很大的自由度。 規范不能保證它們像const指針一樣操作。
我發現指針參數在兩種方面非常有用:
主要區別在於該函數的調用方式。 考慮以下示例:
void f(string *s)
{}
int main() {
string s;
f(&s);
}
和參考版本:
void f(string &s) { }
int main() {
string s;
f(s);
}
所以函數調用看起來不一樣...
`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.