簡體   English   中英

C ++如何處理具有相同名稱的對象向量?

[英]How does C++ cope with vector of objects with the same name?

假設我在某個本地范圍內創建了一個對象,並將其添加到該范圍外的矢量中。

std::vector<sometype> Vec;
for( int i = 0, etc... )
{
    sometype Object;
    Vec.push_back(Object);
}

現在,對象的副本將傳遞給Vec,對象本身將被銷毀。

但是,如果繼續這樣做,我將繼續創建存儲在向量中的許多名稱為“ Object”的對象。 現在,我可以通過它們的索引訪問它們,但是C ++如何處理我顯然有許多同名對象的事實?

sometype對象的名稱無關緊要。 您是正確的,每次調用push_back都會將Object的副本放置到Vec上,但這不是放置在矢量上的對象的名稱。 實際對象放置在向量中,可以通過正確索引向量來引用。

對象的名稱不是Object 那是變量的名稱。 用於復制構造vector元素的變量的名稱與該元素沒有任何關系。

對象通常沒有名稱。 有些確實如此,尤其是那些由變量命名的對象。 但是動態構造的對象卻沒有。 即使對象的變量和名稱之間的連接也很松散。 例如,如果您只有一個對象的指針,則無法找出該對象是否由變量命名。

只需將變量名視為某些內存地址的替代表示即可(對您來說是透明的!)。 您已經在內存中的某個特定位置創建了一個對象,該對象由您的變量名引用。 現在,您將對象復制到一個新的位置,該地址具有一個不同的地址,該地址與原始對象所處的地址完全無關,因此它也將獲得一個新的“名稱”,而變量名仍引用舊地址(只要仍在范圍內)。

當然,在向量內部,這個新的“名稱”不僅是地址,而且是如何找到它的秘訣( vec[someIndex] :“轉到向量內部數據的開頭,您將在距向量的給定偏移量處找到對象那里”,這是;荒唐地說的,索引運算符的實際作用-再次對您透明)。

C ++如何處理具有相同名稱的對象向量。

不合邏輯的推論。

在您的for循環中,單詞“ Object”出現2次。

a)第一個出現的“ sometype Object;”是對“自動”內存區域的聲明和初始化。 在這種情況下,“對象”一詞在有限的范圍和生存期內標識實例的位置。

b)第二次出現“ Vec.push_back(Object);”是編譯器生成代碼以將實例傳遞給函數“ push_back”的命令。 在這里,它是通過引用(而不是值)傳遞的,這意味着函數“接收”的地址,而不是實際實例。

區別是:

  • 該函數的形式參數是“常量T&值”

(基於cppreference.com,其中函數以正式名稱“值”聲明為std :: vector :: push_back(const T&value)。)

  • 實際參數起作用的是“ sometype&Object”。

(根據您的代碼)

  • 顯然,這兩個名稱不相同。

因此,您的問題得出的結論是“結論或陳述在邏輯上不遵循先前的論點或陳述。”


摘要:

a)您的代碼中沒有什么叫做“值”或“ T”。

b)如果檢查了std :: vector代碼,則不會找到“ sometype”或“ Object”。

名稱不一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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