簡體   English   中英

將對向量的引用作為參數傳遞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM