[英]Passing a reference to a vector as a parameter
我知道當您將數組作為參數傳遞時,基本上就將數組的地址傳遞給索引0。然后,硬件知道int通常為4個字節,因此可以輕松訪問其他元素。 我的問題是關於向量的。 如果我有功能
void bla(std::vector<int> &arr)
{
}
然后,它應該傳遞對向量的引用,但是它會像數組一樣發生嗎? 向量是使用數組實現的,因此我的假設是,當我傳遞引用時,它只是傳遞第一個元素的地址。 是對的嗎?
另外,如果我僅作為矢量通過,將會發生什么? 會在堆棧上創建副本嗎? 謝謝
std::vector
與原始C樣式數組有很大不同 ,因此,如果您通過引用傳遞std::vector
,則沒人會說std::vector
第一項的地址就是傳遞給函數的地址。
在std::vector
內部,除了“原始C樣式數組”之外,還有更多的邏輯。
如果想要向量中第一項的地址,則可以使用&v[0]
或v.data()
獲得它。
如果按值傳遞向量,則將獲得原始向量的副本。 而且您對函數內部的副本所做的所有修改都不會反映到原始文件中。
如果通過引用傳遞矢量,則將傳遞整個數組並可以對其進行編輯。 它不傳遞第一個元素的地址。 否則,如果不通過引用傳遞,它將僅復制該數組。
資料來源:學校編碼經驗(如果不准確,請編輯)。
一般來說:
void foo(Bar b)
-按值傳遞, b
是副本或原始Bar
。 void foo(Bar& b)
-通過引用傳遞,您可以通過b
修改原始Bar
。 void foo(Bar* b)
-通過指針傳遞,您可以通過b
修改原始Bar
(只要b
不為null)。 void foo(const Bar& b)
-通過const引用傳遞, b
是原始Bar
但是您不能在foo
的范圍內對其進行修改。 void foo(const Bar* b)
-通過指向const的指針傳遞, b
是指向原始Bar
的指針,但是您不能在foo
的范圍內對其進行修改。 void foo(Bar* const b)
-傳遞const指針, b
是指向原始Bar
的指針,並且可以修改原始Bar
(只要b
不為null),但是您不能更改b
指向的內容。 void foo(const Bar* const b)
-通過const指向const的指針,您不能更改原始Bar
也不能更改b
指向foo
范圍內的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.