如今主流的手機平臺不少,好比:Windows開發的Windows Phone(WP-"X"),java
Apple(蘋果公司)開發的ios,Google(谷歌)開發的android,等等!android
而這些操做系統平臺的語言支持大同小異;ios
一、Windows Phone上支持VB,C#,C,C++;windows
二、iOS上支持Object-c,C,C++;架構
三、android上支持java,C,C++;操作系統
既然如此,咱們要想開發一款應用,並且兼容主流平臺都能應用,並且不想寫太多的代碼,咱們如何選擇開發語言呢?答案是:咱們能夠選擇C++語言。.net
C++語言是如何跨平臺的?開發
一、首先說一下,C#,java也跨平臺,它們是怎樣跨平臺的?編譯器
C#,java跨平臺,指的是,通過「編譯系統」 編譯,生成中間文件「字節碼」,這樣的字節碼通過不一樣平臺「解釋器」再解釋一次,就變成了適應各個平臺的「機器碼」。虛擬機
二、而C++語言,源代碼是直接通過編譯器編譯成「操做系統」能夠執行的「機器碼」,
那麼它是怎麼跨平臺的呢?由於支持C++語言的各個平臺的架構不一樣(好比CPU可以處理的指令集不同),因此一份C++源代碼要想在另外一個操做系統平臺上執行,就必須用該平臺相對應的C++代碼編譯器對C++源代碼從新進行編譯,生成該平臺能夠直接執行的機器代碼。
它的執行過程是:預處理->編譯->彙編->連接->機器碼
三、我一直覺得:彙編指令是字節碼,而不是二進制文件,實際上錯了,字節碼也是二進制文件,只不過它與具體的機器碼不一樣,具體的機器碼是與具體的運行設備有關的,而彙編指令是與具體的硬件環境無關的。
因此說java,C#跨平臺是創建在「虛擬機」的基礎上的,經過虛擬機,將字節碼 經過「解釋器」,解釋成 機器碼。(java的虛擬機,C#的.net運行時環境)。因此也有的人說java,C#是解釋性語言,而C、C++是編譯性語言。
java,C#的跨平臺受到"虛擬機"的限制,如:
一、.net環境只能在windows下有,Linux(Android),和Unix(ios)都不支持;
二、java虛擬機平臺主要是Android支持,Windows(WP)和Mac(ios)都不支持;
三、.net環境、java虛擬機 在windows上默認是沒有安裝的。
四、java虛擬機能夠配置在mac,windows(PC操做系統)上,可是不能配置在WP,IOS(移動操做系統)上,只能配置在android(移動操做系統)。
因爲C/C++不受虛擬機限制,一份一樣的源程序,只須要在每一個不一樣的平臺從新編譯一次,就能夠在各類平臺上運行應用程序。而java則是編譯一次,而後放到不一樣平臺的java虛擬機上運行!
由於java最後是解釋執行的,C,C++不須要解釋執行,因此C++的執行速度更快一些!
總結一下:
一、C++跨平臺是一份源代碼,在不一樣的平臺上編譯;
二、java跨平臺是一份源代碼,編譯後生成中間字節碼,而後經過 不一樣平臺的java虛擬機來解釋執行的。