1.bool型別不應該參與計算 比如:
bool b =
true
;bool b2 =
-b;
這個時候b2仍然為true,這是因為bool型別在參與運算的時候,編譯器會自動將其提公升為int型別,true為1 ,-b為-1.仍然非零,所以b2仍然非非零,所以轉換成布林值後b2的值為真。
2.定義的時候給等號=表示初始化,而不是定義的時候給等號=表示賦值
比如:
int i =2;
//初始化
i =3
;// 賦值
現在明白了為什麼要將operator=過載命名為賦值運算子函式了。它和複製建構函式有本質的區別。
3.sizeiof運算子
sizeof運算子返回一條表示式或是乙個型別名字所佔的位元組數。其所得的值是乙個size_t型別的常量表示式。
對陣列執行sizeof運算得到整個陣列所佔空間的大小,等價於對陣列中所有的元素各執行一次sizeof運算並將所得結果求和,注意sizeof運算不會把陣列轉換成指標來處理。
4.const_cast
能去掉const屬性,使變數或者物件變為可寫的
5.reinterpret_cast
reinterpret_cast運算子是用來處理無關型別之間的轉換;它會產生乙個新的值,這個值會有與原始引數(expression)有完全相同的位元位。
1.首先來看乙個簡單函式
int
main()
std::cout << s << std::endl;
}
在這個**中,我們在while迴圈中加入cin,這表示從標準輸入流中讀取乙個值並且隱式地檢查cin,判斷是否輸入成功並且檢查讀進來的值是否等於sought的值。
這裡需要注意的是每次cin一次輸入乙個字元到流中沒有任何問題 非常容易理解,但是當我們一次輸入多個字元,字元用空格符或者回車符隔開的時候,這時cin是會判斷乙個字元結束的。while迴圈會依次檢查輸入到流中的字元。
比如我們輸入的是123
4
這個時候編譯器檢測到有1輸入,這個時候就跳出迴圈,但是2 3 4仍然是留在輸入流中的,下次如果需要輸入乙個字元到另乙個變數中,會把2自動輸入到那個變數中,然後流中還會剩下3 4 兩個字元。
比如以下這個函式:
int
main()
std::cout << s << std::endl;
std::cin >> sought;
std::cout << sought;
}
輸出結果為:
1 23
123
2.分號的作用
以前看別人的**的時候看到一條語句後面跟了兩個分號,比如ival = v1 + v2;;
覺得非常奇怪,心想這個也能執行嗎。
但是現在回想一下就想的通了,其實我們可以將兩個分號分開來看,第乙個分號表示ival = v1 + v2這條語句,然後第二個分號表示之間有一條多餘的空語句,其實它並沒有產生實際的作用,在有些情況是無害的,但是用在if或者while的條件後面可能就會出錯,比如:
if
(i1 > i2);.
..orwhile
(i1 != i2);.
..
第一條語句表示if判斷條件後,會執行一條空語句,而將判斷後將要進行的語句處理隔開繼續執行。如果if判斷後面接的宣告/陳述語句使用花括號括起來的塊,那麼又會有區域性變數產生的問題等,所以一定要仔細檢查。
第二條語句同理,這將會導致**無休止地迴圈下去。
3.switch語句不要忘記寫break
4.定位for迴圈語句
如果在定位for迴圈語句中statement需要修改元素的值,一定不要忘記加上&引用,這樣在迴圈體內給元素賦值,直接改變了元素之前繫結的元素的值。
5.跳轉語句
break、continue、goto和return
break和continue是為了跳出迴圈體使用的(比如while、do while for或者switch等);return是為了跳出函式使用的;
goto是為了跳轉到同一函式內另一條語句,需要有標籤來指引goto將要跳到哪去
6.runtime_error
runtime_error是標準庫異常型別的一種,定義在stdexcept標頭檔案中,該類物件通常與throw表示式聯用。標頭檔案中還定義了另外幾種常見的異常類
7.string是屬於std命名空間的,所以需要std::sring。
8.operator =() 賦值運算子函式
using
namespace std;
intmain()
string s1("hello");
表示的是s1這個string類物件的初試化,const char*作為引數傳入建構函式內;
s1 = "nihao";
是乙個賦值運算,它表示將nihao這個字串常量賦給s1,我們都知道const char*是乙個常量,常量是不能當右值的,那為什麼這裡可以用呢,這是因為string類有乙個operator =() 賦值運算子函式,這個函式的引數是const char*
。
C Primer問題總結 1
1.包含來自標準庫的標頭檔案,應該用 對於不屬於標準庫的標頭檔案,比如自己建立的標頭檔案則使用 h 2.成員函式 menber function 是定義為類的一部分的函式,有時也被稱為方法 method 3.cerr 乙個ostream物件,關聯到標準錯誤,通常寫入到與標準輸出相同的裝置。預設情況下...
C primer 要點總結
1.private和protected型別的資料成員或成員函式,不能被物件直接引用。包括建構函式 2.static成員函式只能操作static資料成員,它沒有this指標 3.static資料成員在類內宣告,但必須在類外定義並且初始化,且定義不能標示為static。4.單參的建構函式可以視為到該類型...
C primer 順序容器(3)
前幾篇主要是把vector與string放在一起討論,本篇主要是將list與forward list放在一起比較 list故名思義就是列表的意思。首先我們來看看列表與我們之前討論的vector和string有什麼區別。2.正因為這個特點,如果list要訪問容器中的某一元素,就得遍歷整個容器。使得訪問...