初始化list容器時遇到的錯誤

初始化list<char*>遇到的錯誤

記錄一個今天寫C++遇到的一個錯誤,代碼是這樣的:

list<char *> list = { "hello", "world" };
vector<string> v;
v.assign(list.begin(), list.end());

編寫過程中做的類型檢查並沒有提示任何錯誤,一眼看過去也沒什麼問題,但是並不能通過編譯,錯誤信息是下面這個:

C2440 “初始化”: 無法從“_Ty”轉換爲“_Objty”

可惜我才疏學淺,並不能看懂

於是就想隨便試一試,給初始化列表多加了幾個值,然後類型檢查就出現了錯誤,這樣問題就清晰起來了。上面的第一條語句因爲不能作爲合適的初始化列表,因此被編譯器當成:

list<char *> list("hello", "world");

因爲"hello"的類型是char *,而begin(“hello”)的類型也是char *,所以上面這條語句實際調用的是接受迭代器類型的構造函數

直觀一些,這條語句等價於:

list<char *> list(begin("hello"), end("world"));

而實際上這兩個地址並非指向同一個對象的不同元素,因此這個初始化的結果自然不對。

問題的根源在於沒辦法把 const char* 轉換爲 char*

感覺還蠻隱蔽的,要是多寫或者少寫幾個元素都不會碰到這個結果hhh

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章