c++primer複習(一)

來源:互聯網
上載者:User

標籤:

1 const對象預設為檔案的局部變數(P50)

a.cppconst int a = 1;b.cppextern int a;//undefined reference to "a"a.cppint a = 1;b.cppextern int a;//OKa.cppextern const int a = 1;b.cppextern int a;//OK

即非const變數預設為extern,const變數要在其他檔案中被訪問,必須顯式指定為extern

2 const與引用(P51)

非const引用綁定到const對象是不合法的,const引用可以綁定到const對象和非const對象

const引用還可以綁定到不同但相關的類型的對象,或是綁定到右值

 

3 枚舉定義了相關聯的一組常量集,enum定義了一種新的類型

 

4 字串字面值不是string對象

 getline(cin,string)函數讀取一行,但將忽略最後的分行符號

 string對象的size()操作返回的是string::size_type類型的值,稱為string類類型的配套類型,使得該類型的使用與機器無關

 +操作符的左右運算元必須至少有一個是string類型的對象

 string對象的下標操作可以用作左值

 字元的操作函數如isalnum()、isalpha()、tolower()等函數都定義在cctype標頭檔中(C++標準庫包括了C標準庫,C標準庫中name.h在C++標準庫中對應為cname)

 

5 vector相關問題

  c++程式員優先使用!=而不是<來編寫迴圈判斷條件,由於vector的動態增長特性,在迴圈判斷中,使用內嵌函式size,而不是迴圈之前得到的固定vector大小的值,因為vector會動態增長,內嵌函式會解決運行時的代價問題

 vector可以進行=賦值 如vector<int> a(2,3)  vector<int> b(3,4),可以進行a=b的賦值

 const_iterator只能用於從容器中讀取元素,不能修改元素的值,const vector<T>::iterator 迭代器本身不能移動,但可以修改迭代器指向的元素的值

 

6 bitset相關問題

 建構函式:bitset<n> b;

      bitset<n> b(u);  //u是unsigned long類型

      bitset<n> b(s);  //s是string類型對象,不能是字串字面值

      bitset<n> b(s,pos,n) //需要注意的是,字串的0下標在左側,bitset的0下標在右側

 bitset對象上的操作:

      b.any()        //是否存在1

      b.none()       //是否不存在1

      b.count()      //1的個數

      b.size()       //二進位的個數

      b.test(pos)     //測試pos處是否為1

      b.set(),b.set(pod),b.reset(),b.reset(pos)

      b.flip()       //所有位反轉

      b.flip(pos)     //pos位反轉

      b.to_ulong()    //返回unsigned long值

      os<<b       //輸出位集

 

7 數組和指標

 定義數組維數的常量只能是:整型字面值常量、枚舉常量、整型const對象,不能是非const整型對象

 char a[] = "c++" 與 char a[] = {‘c‘,‘+‘,‘+‘}的區別,char a[3] = "c++"將導致編譯失敗

 與vector不同的是,數組不能直接複製與賦值

 數組下標的正確類型是size_t,指標相減的正確類型是ptrdiff_t類型

 int* p1,p2    //p1是指標,p2是int

 void *指標只能用來傳遞指標,不能解引用,即不能通過void *指標操縱它所指向的對象

 指標和引用的比較:引用定義時必須初始化,一旦初始化,引用就始終指向初始化的對象,所以不存在對引用的重新賦值

 理解代碼:定義了一個4*5的int數組

int **p;p = new int*[4];for(int i = 0;i < 4;++i)    p[i] = new int[5];

 指向const對象的指標:const int *ptr,ptr既可以指向const對象,也可以指向非const對象,ptr本身值可變,不能通過ptr修改指向對象的值

 const指標:int *const ptr,ptr本身是const變數

 C風格字串:以NULL結尾的字元數組

 C風格字串的標準庫函數:cstring,包括strlen、strcmp、strcat、strcpy、strncat、strncpy等函數,這些函數的參數必須是C風格字串

 指標與多維陣列:int *p[4]:p是一個數組,這個數組每個元素的類型是int*

         int (*p)[4]:p是一個指標,這個指標指向一個指向4元素首地址的指標

 

8 位操作符

 ~位求反,<<左移,>>右移,位與&,位或|,位異或^

9 後自增操作符優先順序高於解引用操作符

 

10 new和delete相關問題

  new動態建立對象,如果沒有顯式初始化,則類類型對象使用預設建構函式進行初始化,內建類型對象無初始化,可以使用空括弧強制內建類型初始化

  理解代碼:delete p1刪除的是new分配給p2的動態空間,p1和p2指標本身還可用,之前分配給p1的空間仍有效

int *p1 = new int(1);int *p2 = new int(2);p1 = p2;delete p1;

  type *ptr = 0  定義了一個零值指標,delete ptr是合法的

  delete之後,指向delete刪除的空間的指標編程懸垂指標,為避免懸垂指標的影響,delete之後立刻將指標賦值為0,表明指標不再指向任何對象

 

11 類型轉換

  隱式轉換:指向任意資料類型的指標轉換為void*類型,整型數值常量0轉換為任意指標類型

  顯式轉換(強制類型轉換):cast_name<type>(expression),將expression依據cast_name轉換為type類型

    dynamic_cast:支援運行時識別指標或引用所指向的對象

    const_cast:將轉換掉運算式的const性質

    static_cast:

    reinterpret_cast:

         

c++primer複習(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.