亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++ STL - unordered_map

C++ STL - unordered_map

C++
SMILET 2018-08-08 09:09:47
IDE:vs201541行代碼注釋后的的輸出: 取消注釋41行后:編譯器報錯:   錯誤 C2512 “Point::Point”: 沒有合適的默認構造函數可用 TEST1 d:\program files (x86)\microsoft visual studio 14.0\vc\include\tuple 1180 請問該怎么改? 另外,個人覺得 函數 dosomething() 中的 else情形是多余的?不知道為什么,看到某底層代碼有else,搞不懂,來個大神解釋一波哈?
查看完整描述

1 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

正如Amedeo所說,你在STL多處用到了Point類,而且該類沒有默認合成的構造函數,在執行遇到需要默認實例化該類時就會遇到如上編譯錯誤。

你無法保證在定義STL模板類中何時會實例化你的自定義類,所以最好添加一個默認構造函數。

還有注意到,你注釋掉的41行也是存在隱式漏洞的。

其一,你的默認構造函數沒有了,默認的拷貝函數和賦值運算符重載也不存在。這里你使用了=運算符,而該定義確實不存在。

其二,你的參數是引用,那么賦值給map鍵值對中的對象的生命周期就移交給了它的定義語句所在作用域,也就是vector<Point>的地方,你的代碼比較簡單沒有復雜的邏輯關系,但當你的代碼復雜后,就無法保證map中是否存儲了有效的數據,很可能已經銷毀了的對象。

 

以上僅為個人看法,個人水平有限,可能存在疏漏,只是給你提示一下方向。謝謝


查看完整回答
反對 回復 2018-09-07
  • 1 回答
  • 0 關注
  • 803 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號