#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;
}
c++ primer(第五版)筆記 第二章(2) 變量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.