c++筆記

1. int main(int argc, char *argv[], char *arge[]);

主函數中,argc是參數個數,argv是參數內容,arge是環境變量。

2.指針p被free之後會成爲野指針,在沒有將指針p置爲NULL的情況下,如果再次free就危險了。所以,在free之後,最好是馬上將指針置爲NULL,這樣就安全了。對於一個NULL的指針,free多少次都沒有問題。定義指針的時候最好初始化,初始化指針的時候是用:char* p = NULL;

3.

    char a[] = "hello";
    a[0] = 'X';//正確可以正常賦值
    cout << a << endl;
    char *p = "world"; // 注意p指向常量字符串,是一個字符常量,不能被修改。
    p[0] = 'X'; // 編譯器不能發現該錯誤
    cout << p << endl;//但是運行時出現錯誤。
4.懸空指針:指向一個已經不存在的指針, 比如說函數的返回引用

	char* func()
	{
		char a = 'a';//在函數調用完畢之後,a會被釋放。
		return &a;//不要返回普通局部變量的地址。
	}
5.共用體 同時只能存儲其中的一種類型。如
union one4all
{
	int int_val;
	long long_val;
	double double_val;
};條件是在不同的時間運行。

6.clock()返回程序開始執行後所用的系統時間,它的返回值爲clock_t(類型別名:即轉換爲適合系統的的其他類型)包含在ctime頭文件系統中。符號常量CLOCKS_PER_SEC(每秒鐘包含的系統時間單位數)。

7.關於函數指針:

 // double pan(int)和double (*pf)(int);兩個都是函數,並且pf就是函數指針。
  pf = pam;//那麼pf現在指向pan()函數。(pam()的特徵標和返回類型必須與pf相同	
 	double pam(int);
	double (*pf)(int);
	pf = pam;
	double x = pam(4);
	double y = (*pf)(5);//兩者都在調用同一個函數。
	double y = pf(5);//使用指針來調用函數。
8.對於修改調用函數中數據的函數。函數調用傳參數:
如果對象是內置數據類型,則使用指針。
如果對象是數組,則只能使用指針。
如果對象是結構,則使用引用或指針。
如果對象是類對象,則使用引用。

9.常規new操作符的地址在動態管理的堆中  佈局new操作符在從數組中申請內存。
如果有數組 int buffer[500]
常規new:int *ps = new int [20];   可以使用 delete [] ps;刪除
佈局new: int *ps = new (buffer) int [20]; 不能用delete刪除 會出錯由於分配的不在delete範圍內;
10.通過定義一個了類重載函數調用操作符(),可以使該類的對象像函數的行爲,那麼它的對象就是函數對象。函數的對象通常用作算法的實參。

11.通過定義複製構造函數爲私有的,可以禁止複製,通過聲明而不定義,那麼友元也不能訪問複製構造函數。

12.++i  比 i++ 執行效率高,因爲不需要返回臨時對象,當i爲迭代器的時候差距會更明顯。

13.#ifndef STRING_H   #define STRING_H  #endif 可以避免多次包含同一頭文件。

14.補充:在類中成員變量前聲明mutable關鍵字表示,那麼該成員變量在const成員函數裏可以在被改變。 

15.爲了保證成員函數在執行過程中不會修改const成員,那麼需要在類成員函數的後面添加const。

17.在類中定義常量可以使用 static const int size = 100; 和 enum { size = 1000 }。static成員不能在類中初始化,只能在定義的時候初始化。

18.inline 函數:省去了參數壓棧、生成彙編語言的CALL調用、返回參數、return等過程,從而提高速度,但是浪費了空間。

19.使用複製構造函數和operator=的時候區別是:當用來創建對對象的時候使用前者,否則使用後者。例如:Obj o = a;(等價於Obj o(a))(拷貝構造函數) o = a;(賦值操作符)

20. extern int a; 表示變量是在文件以外定義的,或在文件後面部分定義的。(不需要給a分配空間。)

21.帶.h和不帶.h的頭問家的區別是:一個模板化版本,一個沒有。後者一般都在文件名前加一個字母“c”;

22.C++中不允許,利用返回值來重載函數。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章