c++ c# java 區別小匯
托管與非托管代碼
托管代碼 ,managed code,是由公共語言運行環境(而不是直接由操作係統)執行的代碼。公共語言運行庫會提供例如垃圾自動回收、運行庫類型檢查和安全支持等。
非托管代碼,直接由操作係統運行。
java、c#都是托管代碼;c++不是。再如,COM 組件、ActiveX 接口和 Win32 API 函數都是非托管代碼。
為什麼托管代碼在企業中用的多?
托管代碼由虛擬機執行,它可以幫程序員做許多事情,如數組越界檢查、內存回收。人是容易犯錯的動物,所以寫cpp代碼易犯一些隱蔽的錯誤,如前麵講的數組越界、內存泄露,且這些錯誤排查起來很困難。因此為了追求開發效率,損失一些執行效率也可以接受。
非托管代碼,直接由操作係統運行。
java、c#都是托管代碼;c++不是。再如,COM 組件、ActiveX 接口和 Win32 API 函數都是非托管代碼。

托管代碼由虛擬機執行,它可以幫程序員做許多事情,如數組越界檢查、內存回收。人是容易犯錯的動物,所以寫cpp代碼易犯一些隱蔽的錯誤,如前麵講的數組越界、內存泄露,且這些錯誤排查起來很困難。因此為了追求開發效率,損失一些執行效率也可以接受。
main 函數。
c++。全局函數。
c#。Main首字母大寫,必須是一個類的成員函數。
數組
c++. int arr[size].
c#. int [] arr=new int[size].
java同c#。
類定義
C++。結尾有分號。
c#。結尾無分號。
this關鍵字
c++。this->成員。
c#。this.成員。
bool
c#。整數與bool不能相互轉換。
java。用的是boolean關鍵字。整數與boolean不能相互轉換。
注釋
c#。支持 #region 和 ///<summary>注釋。
java。支持/** */的注釋,用於IDE提示、生成JavaDoc。
反射
c++。隻有它不支持。
泛型
c++。泛型,也就是template隨便用。參見 https://blog.csdn.net/chuchus/article/details/39696117 。
java。泛型是靠擦除機製實現的。所以
語法糖
java。
const 與 final
c++。const 修飾的對象不可更改。
java。final僅約束變量的引用不變,而非所引用對象的內容不變。因此,java沒有c++中“常函數”的機製。
多態
c++。擁有virtual關鍵字是多態的必要條件。
java。多態是主動的行為。@Override 聲明可要可不要。
友元
c++。隻有它有。
迭代器
c++。iterator是內部類,即vector、deque等分別擁有自己的iterator。
java。iterator是Iterable接口中的函數。容器類都實現了這個接口。
異常
cpp。沒有finally關鍵字。它表示無論try{}中是否有異常拋出,最終都會執行的動作。
運算符重載
c++。可以重載為友元,也可以重載為成員函數。
java。太弱了,隻能重載“+”號。
形參默認值
c++。支持。
java。不支持。
最後更新:2017-04-03 05:39:25