C/C++編程學(xué)習(xí)筆記:C++基礎(chǔ)之變量的聲明與初始化賦值
變量的聲明
所有變量必須在使用前進(jìn)行聲明,變量可以在使用前進(jìn)行聲明,不必在函數(shù)或過程的開始位置先聲明。
變量名規(guī)范
1. 名稱只能使用字母、數(shù)字、下劃線。
2. 名稱的第一個字符不能是數(shù)字。
3. 不能與C++關(guān)鍵字重名。
注:以下劃線開頭的變量名是系統(tǒng)專用的,盡量不要這樣命名。長度不要過長,最長盡量不要超過63。
變量聲明舉例

變量的初始化
1. 默認(rèn)初始化
默認(rèn)初始化是指定義變量時沒有指定初值時進(jìn)行的初始化操作。
內(nèi)置類型變量
若變量定義在語句塊(即{})外面,那么變量會被默認(rèn)初始化為0或等同于0的值。
若變量定義在語句塊里面,變量的值是不確定的。
為什么不初始化變量呢?給自己挖坑嗎?
類類型變量
無論定義于何處都會執(zhí)行默認(rèn)構(gòu)造函數(shù)。如果默認(rèn)構(gòu)造函數(shù)中沒有初始化變量,那么變量的值是不確定的。如果不 存在構(gòu)造函數(shù),編譯器會根據(jù)需要創(chuàng)建空默認(rèn)構(gòu)造函數(shù)。
2. 值初始化
值初始化是指用了初始化器但沒有提供初始值的情況。變量會被默認(rèn)初始化為0或等同于0的值。
3. 直接初始化
直接初始化就是指使用了初始化器并且提供了初值的情況。
對于類來說,直接初始化會調(diào)用與實(shí)參最佳匹配的構(gòu)造函數(shù)。
例如:int a(1);string str("hello");Test a(1,2,3);
4. 拷貝初始化
拷貝初始化就是用等號對變量進(jìn)行賦值的方法,即將右值拷貝給左值。
內(nèi)置類型變量
對于內(nèi)置類型變量來說,直接初始化與拷貝初始化差別幾乎可以忽略不計(jì)。
類類型變量
對于類類型變量來說,直接初始化會調(diào)用與實(shí)參最佳匹配的構(gòu)造函數(shù),但是拷貝初始化調(diào)用類的拷貝構(gòu)造函數(shù)。
*注:對類類型變量進(jìn)行初始化時,如果類的構(gòu)造函數(shù)采用了explicit修飾并且需要隱式類型轉(zhuǎn)換。此時只能通過直接初始化而不能通過拷貝初始化。
例如:

5. 列表初始化
在可以使用直接初始化和拷貝初始化的地方都能用列表初始化。列表初始化對容器的初始化同其他方法更方便一些。
對于容器
特別地,對于容器初始化時有()和{}兩種方法。
使用()
有一個參數(shù)時僅構(gòu)造容器。兩個參數(shù)時,第一個參數(shù)構(gòu)造容器,第二個初始化容器。
使用{}
如果參數(shù)序列的所有值均與容器類型相同,那么初始化時會將參數(shù)列表中的所有值放入容器中,容器的元素數(shù) 量和參數(shù)數(shù)量相同。
如果參數(shù)序列中的值與容器類型不同,那么會考慮將該值作為構(gòu)造容器的參數(shù);如果不能作為參數(shù)那么就會出 現(xiàn)編譯錯誤。
例如:
Copy


6. 動態(tài)分配時的初始化
動態(tài)分配時不加以初始化時,內(nèi)置數(shù)據(jù)類型的變量的值是不確定的。類類型變量將調(diào)用默認(rèn)構(gòu)造函數(shù)進(jìn)行初始化。
例如:
int* a = new int();
int* a = new int(123);
vector<int> *t1 = new vector<int> {1,2,3,4};

學(xué)習(xí)C/C++編程,了解C++更多知識歡迎關(guān)注UP,持續(xù)更新更多小知識一起成長呀~