Java 為什麼沒有操作符重載

來源:互聯網
上載者:User
最近一直在看Herb 的 Exceptional C++ 系列書籍 ,Scott Meyer 在書的序中寫到,Exceptional C++是一本常常會"make me surprise" 的書,的確,即使使用了C++ 已經很多年,但看這樣的書仍然讓自己覺得對C++的理解還十分淺薄。

但是正如不斷有人提出來的這個問題 - “是系統設計的複雜程度本身需要那麼多的知識,經驗和技巧還是C++ 自己本身太過複雜” (嗯,我個人的理解是二者皆是 ^_^),Bruce 在 Thinking In Java 4 的序中寫到,隨著自己不斷加深的對Java的理解,越來越瞭解到Java語言的設計目標就是使得描述和構建複雜系統的工作變得更容易,一個即使只有有限的知識和經驗的程式員也能夠使用Java來進行某種複雜程度的系統建構工作,Java就是一門更容易,能夠在更高的抽象層次上描述系統的語言,也許它不那麼高效,有時也顯得不夠靈活,但是它不會經常讓你 surprise...

回到題目的話題,Java為什麼沒有操作符重載,C++ 的操作符重載是其語言強大與靈活的一個重要特徵, 我今年因為工作原因接觸過Quatro DSP的模擬器,Quatro DSP是一個用於印表機,掃描器的數字圖象處理器,模擬器本身其實是一個C++庫,通過庫的支援能夠把Quatro DSP的組合語言轉化為合法的C++ 函數調用,從而在C++的整合式開發環境(如 VC)中類比DSP組合語言的執行,主要工作原理無非是將寄存器定義為某個類類型對象,從而使用宏替換和操作符重載將組合語言變成函數調用。

C++不但有操作符重載,還有自訂類型轉換 (嗯,大多數的C++書籍都會勸你在沒有正當理由的情況下千萬不用去使用後者),Exceptional C++書中在講到異常安全的程式碼的章節中有這麼一段話 ——

“In particular, it helps to develop a habit of eyeing with mild suspicion anything that might turn out to be a function call --- including user-defineed operators, user-defined conversions, and silent temporary objects among the more subtle cluprits - because any function call might throw.”

"實際上,它會幫你養成這樣的習慣,對所有語句都帶著懷疑的眼光,猜測這有可能會是一個函數調用 - 包括自訂動作符,自訂類型轉換,和一些更是難以捉摸的語境中悄悄產生的臨時對象 - 因為函數調用就有可能拋出異常。"

Herb寫這段話的目的是為了說明在C++中寫異常安全或者異常中立的代碼,你必須小心分析那些語句有可能拋出異常,而一個模版代碼中的大部分語句都十分有可能是一個函數調用,而函數調用就有可能拋出異常,最後剩下給你的確定不會拋出異常的語句會非常的少... ... 如果你沒有做好這樣的心理預期,想當然的認為大多數語句都不會拋出異常,那麼你被 surprise的幾率就會非常之高 ... ...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.