第一章沒有什么講的
iostream庫包含兩個基礎類型istream和ostream
直接第二章吧
算數類型比較不常見的wchar_t 寬字符,char16_t,char32_t Unicode字符。
unsigned char c=-1結果輸出是255----》有符號的-1是11111111 第一位是符號位嘛,然后轉換為無符號類型,就成了255
signed char c2=256;給帶符號類型一個超出它表示范圍的值時,結果是未定義的。
也就是說不要混用帶符號與無符號類型
這里有個例子:unsigned u=10;int i=-42;cout<<i+i<<endl;//輸出-84;cout<<u+i<<endl;//如果Int占32位,輸出4294967264;
字面值常量的形式和值決定了它的數據類型十進制字面值的類型是int long longlong 中尺寸最小值,如果一個字面值與之關聯的最大的數據類型都放不下,將產生錯誤,就比如,cout<<2222222222222222222222222222222222222222<<endl;輸出什么數字我也不知道。
嚴格來說,十進制字面值不會是負數,如果我們使用了一個形如-42的負十進制字面值,那個負號并不在字面值之內,它的作用僅僅是對字面值取負值而已;
可以通過前綴后綴來指定字面值的類型,比如42ULL,無符號整型字面值,類型是unsigned long long; L'a',寬字符型字面值,類型是wchar_t;
對象的初始化與賦值不一樣,初始化的含義是創建變量時賦予其一個初始值,而賦值的含義是把對象的當前值擦除,而以一個新值來代替;
列表初始化:int units_sold=0;int units_sold={0};int units_sold(0);int units_sold{0};
但是如果我們使用列表初始化且初始值存在丟失信息風險時,編譯器將報錯。
比如:long double ld=3.1415926; int a{ld},b={ld};//錯誤,轉換未執行 int a=ld//正確,但丟失了部分值
默認初始化比較重要,如果時內置類型的變量未被顯示初始化,它的值由定義的位置決定,定義于任何函數體之外的變量被初始化位0,定義在函數體內部的內置類型變量將不被初始化,一個未被初始化的內置類型變量的值是未定義的??偟膩碚f,定義于函數體內的內置類型的對象如果沒有初始化,則其值未定義,類的對象如果沒有顯式的初始化,則其值由類確定。
聲明使得名字為程序所知,定義負責創建與名字關聯的實體;
如果想要聲明一個變量而非定義它,就在變量名前加關鍵字extern,而且不要顯式地初始化變量;
extern int i;//聲明i而非定義i int j//聲明并且定義j extern double pi=3.14//定義
注意::在函數體內部,如果試圖初始化一個由extern關鍵字標記地變量,將引發錯誤。
作用域:沒什么好說的,直接舉個例子吧
int main(){ string p="23"; cout<<p; { int p=12; cout<<p; }}//p會分別輸出23 12;但是:int main(){ cout<<p; string p="23"; cout<<p; int p=12; cout<<p;}//這樣會出錯,因為string p與int p產生了沖突;新聞熱點
疑難解答