天天看點

C/C++程式設計學習筆記:C++基礎之變量的聲明與初始化指派

變量的聲明

​ 所有變量必須在使用前進行聲明,變量可以在使用前進行聲明,不必在函數或過程的開始位置先聲明。

變量名規範

​ 1. 名稱隻能使用字母、數字、下劃線。

​ 2. 名稱的第一個字元不能是數字。

​ 3. 不能與C++關鍵字重名。

​注:以下劃線開頭的變量名是系統專用的,盡量不要這樣命名。長度不要過長,最長盡量不要超過63。

變量聲明舉例

C/C++程式設計學習筆記:C++基礎之變量的聲明與初始化指派

變量的初始化

1. 預設初始化

​ 預設初始化是指定義變量時沒有指定初值時進行的初始化操作。

内置類型變量

​ 若變量定義在語句塊(即{})外面,那麼變量會被預設初始化為0或等同于0的值。

​ 若變量定義在語句塊裡面,變量的值是不确定的。

​為什麼不初始化變量呢?給自己挖坑嗎?

類類型變量

​ 無論定義于何處都會執行預設構造函數。如果預設構造函數中沒有初始化變量,那麼變量的值是不确定的。如果不 存在構造函數,編譯器會根據需要建立空預設構造函數。

2. 值初始化

​ 值初始化是指用了初始化器但沒有提供初始值的情況。變量會被預設初始化為0或等同于0的值。

3. 直接初始化

​ 直接初始化就是指使用了初始化器并且提供了初值的情況。

​ 對于類來說,直接初始化會調用與實參最佳比對的構造函數。

​例如:int a(1);string str("hello");Test a(1,2,3);

4. 拷貝初始化

​ 拷貝初始化就是用等号對變量進行指派的方法,即将右值拷貝給左值。

内置類型變量

​ 對于内置類型變量來說,直接初始化與拷貝初始化差别幾乎可以忽略不計。

類類型變量

​ 對于類類型變量來說,直接初始化會調用與實參最佳比對的構造函數,但是拷貝初始化調用類的拷貝構造函數。

​*注:對類類型變量進行初始化時,如果類的構造函數采用了explicit修飾并且需要隐式類型轉換。此時隻能通過直接初始化而不能通過拷貝初始化。

​ 例如:

C/C++程式設計學習筆記:C++基礎之變量的聲明與初始化指派

5. 清單初始化

​在可以使用直接初始化和拷貝初始化的地方都能用清單初始化。清單初始化對容器的初始化同其他方法更友善一些。

對于容器

​特别地,對于容器初始化時有()和{}兩種方法。

​使用()

​ 有一個參數時僅構造容器。兩個參數時,第一個參數構造容器,第二個初始化容器。

​使用{}

​ 如果參數序列的所有值均與容器類型相同,那麼初始化時會将參數清單中的所有值放入容器中,容器的元素數 量和參數數量相同。

​ 如果參數序列中的值與容器類型不同,那麼會考慮将該值作為構造容器的參數;如果不能作為參數那麼就會出 現編譯錯誤。

​ 例如:

Copy

C/C++程式設計學習筆記:C++基礎之變量的聲明與初始化指派
C/C++程式設計學習筆記:C++基礎之變量的聲明與初始化指派

6. 動态配置設定時的初始化

​ 動态配置設定時不加以初始化時,内置資料類型的變量的值是不确定的。類類型變量将調用預設構造函數進行初始化。

​ 例如:

​int* a = new int();

​int* a = new int(123);

​vector<int> *t1 = new vector<int> {1,2,3,4};

學習C/C++程式設計知識,想要成為一個更加優秀的程式員,或者你學習C/C++的時候有難度,可以來部落客的C語言C++零基礎程式設計學習圈,裡面不僅有學習視訊和檔案資料,還有更多志同道合的朋友,歡迎轉行也學習程式設計的夥伴,和大家一起交流成長會比自己琢磨更快哦!

微信公衆号:C語言程式設計學習基地