2009-02-15 55 views
7

是否可以傳遞函數對map元素的值的引用,並在那裏修改它?引用STL地圖元素的值?

foo(string & s) 
{ 
    s = "xyz"; 
} 

map<int, string> m; 
m[1] = "abc"; 
foo(m[1]); // <-- Is it ok? Will m[1] be "xyz" after this call? 

謝謝。

回答

8

答案是肯定的。

(操作符[]返回一個reference

4

是的,我們可以。
它也適用於std::vectors(因爲它看起來像你使用數字鍵,你可能會考慮使用它們)。

+1

請注意矢量 ::迭代雖然(取消引用它不會產生引用) – 2009-02-15 14:06:19

2

是的。

這與鍵入m [1] =「xyz」沒有什麼不同。一旦編譯完成,編譯器將把它全部減少到幾乎相同的東西。

1

建議的一個建議:你可能想把它作爲指針而不是引用。我這樣做是爲了讓那些隨便的讀者更加明白它會被改變。

這是所有關於明確溝通下一個人的派克,誰必須維護此代碼。

但除此之外,是的,這是完全合法的代碼!

+1

我尊敬地不同意你的建議。我傾向於更喜歡引用,除非在某些情況下我要提供空指針。否則,我恐怕我只是創建一個可能的方式來濫用代碼,即用空指針而不是有效的引用... – 2009-02-16 14:44:48

0

是的,沒關係 - 正如大家已經說過的 - 而且,您的編譯器會告訴您它是否不是。你可能想嘗試一下;嘗試將「hello」或(42)傳給foo(字符串&)以獲得編譯器給出的警告的感覺。