C++常見錯誤總結(不定時更新版~)

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是個局部變量所以函數運行完畢會被銷燬,此時返回一個空引用是錯誤的
發佈了25 篇原創文章 · 獲贊 15 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章