2013-03-02 65 views
0

任何人都可以告訴我函數返回容器中元素的引用(例如Type&)(例如boost::unordered_map)是否安全?關於容器中元素的引用

如果我們能這樣做,爲什麼?因爲我認爲引用類型的工作方式與指針相同(糾正我,如果我錯了),並且容器中元素的內存地址可能會隨時間而改變,所以引用的內容不再是以前的內容。我對嗎?

如果可以,我們可以返回容器中元素的指針嗎?

我有這個問題,因爲我看到這發生在別人的代碼,它工作得很好......

回答

2

這要看情況。

這很好,只要容器永遠不會被修改。如果容器被修改爲,那麼每個容器類都有自己的關於何時對現有元素的引用失效的規則。

C++標準是查找規則的官方方式,但大多數情況下,您將安全地閱讀一個好的在線參考(無雙關語),如http://cppreference.com。例如,我們知道std::vector::insert將肯定使對所有後續元素的引用無效,並可能使對所有元素的引用無效。

+0

那我怎麼知道引用是否失效。訪問該引用時會拋出運行時錯誤嗎? – user2100910 2013-03-02 20:32:57

+0

@ user2100910:沒有編程方式要知道。如果你通過一個無效的引用來訪問某個東西,你可能會也可能不會看到一個運行時錯誤(這是未定義的行爲)。 – 2013-03-02 20:33:38