例如如下:
[cpp]
map<const char*, const char*> map_test;
map_test["a"] = "a";
map_test["a"] = "a";
map_test["a"] = "a";
map<const char*, const char*> map_test;
map_test["a"] = "a";
map_test["a"] = "a";
map_test["a"] = "a";
實際上會將三個"a"插入到map中,因為三個key的指針不同,所以被認為是三個不同的key。而如果改為如下用法:
[cpp]
ap<string, string> map_test;
map_test["a"] = "a";
map_test["a"] = "a";
map_test["a"] = "a";
map<string, string> map_test;
map_test["a"] = "a";
map_test["a"] = "a";
map_test["a"] = "a";
編譯器自動加入char* -> string的函數,而string重載了==操作符函數,內部的判斷不是判斷指針是否相等,而是判斷字符串是否相等,這樣一來,實際上只會有一個"a"插入到map中。
實際上用string的好處還有很多,例如它內部封裝好了大部分常用字符串操作函數,更重要的是支持類似如下的方法:
[cpp]
string a = "a";
string b = "b";
string c = a + b;
string a = "a";
string b = "b";
string c = a + b;
這次寫成文章是為了提醒自己,最近在重寫cocos2d-x的部分實現時,遇到了我第一個例子的問題,算是很簡單的基礎問題吧(羞愧~),以後會盡量用string來代替char *(在不需要十分嚴格考慮性能的情況下)。