1. 程式人生 > >【C++學習記錄2】C到C++的升級

【C++學習記錄2】C到C++的升級

C++繼承了所有的C特性;

C++在C的基礎上提供了更多的語法和特性;

C++的設計目標是執行效率和開發效率(比C語言還高)的統一。

(C++中++的體現)C++是C語言的進化和升級。最重要的是兩個方面,其一是型別的加強(型別檢查更嚴格),其二是天生面向物件的支援(內建天生支援面向物件軟體開發方法學)。

C++語言更強調語言的實用性:

所有的變數都可以在需要使用時定義(C語言規定,變數必須在作用域的開始處定義)(像C語言中,while1()break的使用小技巧一樣)

register關鍵字請求編譯器將區域性變數儲存於暫存器中。

在C++中依然支援register關鍵字,但C++編譯器有自己的優化方式:

1)C語言中無法獲取register變數的地址;

2)C++中可以去取得register變數的地址。

C++編譯器發現程式中需要取register變數的地址時,register對變數的宣告變的無效。

(早期C語言編譯器不會對程式碼進行優化,因此register變數是一個很好的補充。)

在C++中,不允許定義多個同名的全域性變數。

(在C語言中,重複定義多個同名的全域性變數是合法的。多個同名的全域性變數最終會被連結到全域性資料區的同一個地址空間上。)

struct關鍵字的加強:

1)C語言中struct定義了一組變數的集合;

2)C語言中struct定義的識別符號並不是一種全新的型別;

3)C++中的struct用於定義一個全新的型別。

問題:int f()與int f(void)有區別麼?如果有區別是什麼?

答:要看用什麼編譯器,C語言的還是C++的。

C++中所有的識別符號都必須顯示的宣告型別(C語言中的預設型別在C++中是不合法的)。

如上圖所示,f()是個函式定義麼,如果是的話,函式型別是什麼?g()可以接受多少個引數呢?

在C語言裡面定義函式時沒有給出引數或返回值的型別,預設為int。

C++中函式必須有返回值。

 

小結:

C++更強調實用性,可以在任意的地方宣告變數(區域性變數的定義)和struct

新型別的使用;

C++中的register只是一個相容的作用;

C++編譯器能夠更好的進行優化;

C++中的任意識別符號都必須顯示的指明型別。