C++遇到常見的錯誤總結:
1.vector容器賦值經常用xxx.push_back(), 而不能直接用xxx[i] = yyy;(下標是修改不是插入,如果要用下標,需要保證初始化時候有足夠的元素 .)
2.如果在循環外對容器進行聲明, 在循環內對容器進行使用,注意在容器使用前清空容器。
3.如果考慮兩種類型元素相關聯,通常使用結構體(map可能會出現多重映射)。
4.關於計數器,static要在類外初始化。int Student::count = 0;
此時不用在前面加static
5.靜態數據成員要通過靜態成員函數訪問
6.閏年的判斷((year % 4 == 0 &&year%100!=0) || (year%400==0))
7.
int m = 10;
int &y = 10 // 此時會報錯**非常量的引用值必須爲左值**正確的語句爲:int &y = m; 或者 const int& y = 10
8.設一類名爲A則 A()會聲明一個調用缺省構造函數創建的無名臨時對象,同時下面的一句也有同樣的效果;
class A {...} a;
9.當我們創建一個構造函數時會自動屏蔽缺省的默認構造函數
10.當編譯器爲了找到合適的函數重載時,它不會檢測函數的返回類型,而只會檢測函數的形參類型數量順序。
11.拷貝構造函數必須call by reference否則會出現無窮遞歸而使程序崩潰
12.new運算符和delete可以進行重載
13.iostream.h是C語言中的頭文件,不存在名稱空間
14.默認析構函數不能有返回值也不能有參數,同時也不能重載
15.
int * const p; // 聲明的是一個常量指針,指針不可變,指向的整型變量可以改變
const int* p; // 聲明的是一個指向常量的指針,指針可以變,指向的整型變量不可以改變
const int* const p; // 聲明的是一個指向常量的常量指針,兩者均不可以修改
16.引用是別名,只可以被初始化,不可以再賦爲另一個對象的別名,但是指針卻可以被賦值;同時引用不能爲空而指針可以爲空。
17.
classname& operator++() {...} // 重載了前置自加運算符
classname operator++(int o) {...} // 重載了後置自加運算符,o爲沒有實際意義的參數
前置++無形參,引用返回;後置++有形參,按值返回
18.C++不能爲基本數據類型重載運算符
19.派生類的指針必須強制轉換爲基類指針後才能指向基類的對象
20.不能重載的運算符: :: . * ?: sizeof
21.按值返回和按引用返回的區別:
int test() {
...
return test;
} // 此時生成的是變量test的拷貝即一個臨時變量,當這個變量被使用後就會被銷燬,所以按值返回不能做左值運算
int& test() {
...
return test;
} // 此時返回的是引用即變量test的別名,我們可以對這個變量進行左值運算如賦值
int& test() {
int temp;
return temp;
} // 由於temp是個局部變量所以函數運行完畢會被銷燬,此時返回一個空引用是錯誤的