c++ primer(第五版)筆記 第二章(2) 變量

#include<string>
#include<iostream>
using std::cout;
using std::endl;

int zero;			//定義
extern int i = 3;	//定義
extern int l;		//聲明
extern int l;		//聲明,可以多次聲明,但定義只能有一個
extern int l;		//聲明
int main()
{
	//數據類型決定了變量所佔空間的大小,佈局方式,空間所存儲值的範圍以及變量能參與的運算
	//初始化(initialized)是創建變量時賦予某一個初始值
	//賦值是把當前變量的值擦除,然後賦予另一個新值
	//初始化的幾種方式:
	int a = 1, b = { 1 }, c(3.14), d{ 1 };	//花括號爲 c++11 標準,初始化列表(initialized list),使用該方式初始化內置類型時,如果初始值存在丟失信息的風險,編譯器會報錯
	//int e{ 3.14 }; //conversion from 'double' to 'int' requires a narrowing conversion

	//內置類型的變量,定義在任何函數體外,將被初始化爲0,而定義在函數內部的不會初始化,其值是未定義的
	//初始化每一個內置類型的變量是個好習慣
	cout << "zero:" << zero << endl;	//0
	int unkown;
	//cout << "unkown:" << unkown << endl; //Error uninitialized local variable 'unkown' used
	//類類型的對象如果沒有顯式初始化,其值由類決定
	std::string strNull;
	cout << "strNull:"<< strNull << "!" << endl;	//strNull:!

	//c++ 支持分離式編譯(separate compilation)機制,靜態類型(statically type)語言,在編譯階段檢查類型,用於判斷是否支持要執行的運算,所以在使用某個變量前必須聲明其類型
	//變量的聲明(declaration)規定了變量的類型和名字,使其爲程序所知,除此之外,定義(definition)還申請了存儲空間,有時還會初始化一個值,從而創建了與名字相關的實體
	//extern 關鍵字前綴表示聲明,但如果同時顯式初始化一個值則爲定義,該行爲在函數體內將引發錯誤
	//extern int k = 3; error C2205: 'k' : cannot initialize extern variables with block scope

	//標識符(identifier)由字母,數字,下劃線組成,不能以數字開頭,長度無限制,大小寫敏感
	//保持一種命名規範,如 google C++ Style:https://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

	//域(scope),大多作用域都用花括號分隔,同一個標示符在不同的作用域可能表示不同的實體
	//名字的作用域從名字的聲明處開始,到所在域末端結束
	//已聲明的標識符可以在所有內層作用域被識別,並允許內層重新定義外層已有的標識符,還可以通過域操作符訪問其他域的標識符
	int i = 5, sum = 0;
	cout << i << endl; //5,屏蔽了全局變量 i
	cout << ::i << endl; //3 訪問全局變量 i

	for (int i = 0; i != 10; ++i)	//重新定義外層已有的 i,不指明域的情況下,循環體內的 i 都是該值
		sum += i;				//sum 使用的外層 sum
	cout << i << " " << sum << endl;	//5 45 無法訪問內層域內的 i 值, 2個變量都是外層域的

	return 0;
}

發佈了41 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章