今日,對乙個函式進行改寫,發現編譯錯誤。原程式和錯誤如下:
std::string getresult(const std::string &strinput, const std::map&mapresult)
我本人仔細想了想,錯誤原因是這樣的:
1)map本身的操作,從語法上是這樣的:如果存在相應key值,則返回對應value;如果key不存在,則意味著map本身會新增乙個key,並把空value賦給該key;
2)這個語法,意味著map存在被修改的可能;
3)const意味著不可被修改,map被修改的語法與const是矛盾的;
4)所以,現代c++編譯器給該方法進行了錯誤判定,並不允許編譯通過。
本人其實一直是倡導:傳引數的話,盡量用const引用,如果值不是非常簡單的普通型別的話;因為複雜型別傳參的話,會造成臨時變數構造,這是非常不值得的。
現在,我發現這種方法的好處:及時發現可能被修改的語法和語句。
修改語句如下:
std::string getresult(const std::string &strinput, const std::map&mapresult)
return it->second; //錯誤
}
也順道談下現代編譯器的發展:
1)編譯原理號稱是計算機學科的第五大核心學科,從現實主義來講,編譯器確實是程式語言和硬體連線的基本工具;現代編譯器也進行了飛速的發展。
2)編譯器的作用是:讓計算機語言程式設計不同體系結構的計算機識別的計算機語言;由於計算機的體系結構已經固定了,從這個意義上講,很多搞編譯器的,也通常是在故紙堆上進行微小的改動。
3)基於上面,王垠對負責編譯器的工作者進行了蔑視的表達。但計算機發展畢竟受到摩爾定律的推動,編譯器也不能例外。編譯器的語法和考慮日漸周全,為程式設計人員不出錯提供了各種便利。
由乙個網域名稱想到的
花了 大價錢 買了乙個網域名稱 zzm.hk,夠短了,其實沒有什麼含義,但沒有其它選擇。這樣的網域名稱,好像只能指向個人部落格站點,或者用qq郵箱體系裡的網域名稱郵箱功能設定乙個如 i zzm.hk 記得給我發郵件 的個人email。記得 phpdragon 以前還註冊過乙個 phpdragon.c...
乙個常見的錯誤
d software codeblocks test1 main.c 28 warning suggest parentheses around assignment used as truth value wparentheses warning的有道翻譯 警告 建議括號周圍的賦值作為真值 如下 ...
乙個致命的錯誤
昨天除錯了一天的程式,今天終於發現原來是把裝置基位址誤寫成dma基位址。static u8 g intmgrdata adi int secondary memory 8 storage for interrupt manager static u8 g dmamgrdata adi dma bas...