C++學習摘要記錄(1)

正文

    1. 輸入運算符 (>>) , 輸出運算符 (<<)
    2. std是一個類(輸入輸出標準)
using namespace std; //要麼這麼使用
std::cout ; std::cin ; //要麼這麼使用
  • 術語表

    1. 參數 argument
    2. 賦值 assignment
    3. 程序塊 block
    4. 緩衝區 buffer
    5. 內置類型 built-in type
    6. Cerr 一個ostream對象
    7. 字符串字面值常量
    8. cin 一個instream對象
    9. class
    10. class type
    11. clog 一個ostream對象 , 通常用於報告程序的執行信息,存入一個日誌文件中
    12. comnet 註釋
    13. condition 條件
    14. cout 一個ostream對象 , 通常用於程序的正常輸出
    15. { } 程序塊
    16. header 頭文件, 使類或其他名字的定義可被多個程序使用的一種機制.
    17. main 每個程序只有一個main函數
    18. ::運算符 表示命名空間xxx中的名字xxx
    19. #include 頭文件包含指令 , 使頭文件中代碼可被程序執行
  • 基本數據類型
    bool
    char
    wchar_t
    char16_t
    char32_t
    short
    int
    long
    long long
    float
    double
    long double

  • signed和unsigned的區別

    unsigned a和unsigned int a等價。singed a和singed int a等價。爲被unsigned修飾的變量賦一個負值得到的結果是最大值加上這個負值再+1。signed b這種情況b的值可以爲負,輸出負數再正常不過。sign沒加ed不能用來修飾類型。

  • 字面值常量

    1. java : 二進制時用0b10(表示二進制用0b)、010(表示八進制用0)、0x10(表示十六進制用0x)
    2. C++ : 024 八進制 , 0x / 0X 十六進制 , 20 十進制

    字符串字面值結尾處爲一個空字符’\0’ , 字符串字面值實際長度要比他內容多1

  • 指定字面值的類型

    前綴u Unicode16字符 char16_t
    前綴U Unicode32字符 char32_t
    前綴L 寬字符 wchar_t
    前綴u8 UTF-8 char
    後綴u/U unsigned
    後綴l/L long
    後綴ll/LL long long
    後綴f/F float
    後綴l/L long double

  • 變量初始化

    列表初始化 :

    int units_sold = 0;
    int units_sold = { 0 };
    int units_sold{ 0 };
    int units_sold( 0 );
  • 變量聲明和定義

    變量能且只能被定義一次 , 但是可以被多次聲明

    extern int i; // 聲明i
    int j;  //聲明並定義j
    extern double pi = 3.1416; //定義pi
  • 複合類型

    • 引用(reference) :
      引用類型的初始值必須爲一個 對象

      int ival = 24;
      int &refVal = ival; //refVal 指向ival
    • 指針(pointer) : 是”指向”另外一種類型的複合類型

      1. 指針本身就是一個對象, 允許對指針賦值和拷貝 , 在指針的生命週期內它可以先後指向幾個不同的對象.
      2. 指針無須在定義時初始化.
      3. 指針類型要和他所指對象嚴格匹配
        int *ip1, *ip2; //指針ip1 , ip2 ;
        int ival = 24;
        int *p = &ival; //p是指向變量ival的指針
    • 空指針(null pointer) : 不指向任何對象 ;
      warn : 使用未初始化的指針是引發運行時錯誤的一大原因.

      int *p1 = nullptr;
      int *p2 = 0;
      int *p3 = NULL; //必須 #include <cstdlib>
    • 引用 訪問的時它最初的綁定對象

    • 指針 給指針賦值就是令他存放一個新的地址 , 從而指向一個全新的對象.

      int i = 42;
      int *pi1 = 0;
      int *pi2 = &i;
      int *pi3 = pi2; // 現在指針pi3 和 pi2 都指向i
    • void* 指針 : 可用於存放任意對象的地址.

      double obj = 3.14 , *pd = &obj;
      void *pv = &obj;
    • 指向指針的指針 :

      int ival = 1024;
      int *pi = &ival; // 指針pi 指向 引用ival
      int **ppi = &pi; // 指針ppi 指向 指針pi
      int ***pppi = &ppi; // 指針pppi 指向 指針ppi
    • 指向指針的引用 :

      int test() {
          int i = 42;
          int *p;
          int *&r = p;  //r是一個對p指針的引用
      
          r = &i;  
          r = 0; //可以直接賦值,  表示p指針指向的引用i , i賦值爲0
      }
      
    • const 限定符 : 跟java 中 final 關鍵字類似
      多個文件之間共享const對象, 須在變量定義之前添加extern(聲明)關鍵字.

    • const 的引用 : 對常量的引用

      void testConst() {
          const int ci = 1024;
          const int &ri = ci; // 引用及其對應的對象都是常量
      }
    • 指向常量的指針 : 不能改變其所指對象的值

      void testConst1() {
          const double pi = 3.15;
          const double *ptr = &pi;  //指針指向一個const常量, 自身也必須是const
      }
    • 常量指針 : 必須初始化, 一旦初始化完成, 它的值就不能被改變了.

      void testConst() {
          int errNum = 9;
          int *const curErr = &errNum;  // curErr 將一直指向 errNum
          const double pi = 3.14;
          const double *const pip = &pi; // pip是一個一直指向常量對象的常量指針
      }
    • 頂層const : 表示指針本身是一個常量

    • 底層const : 表示指針所指對象是一個常量

      void testConst() {
          int i = 0;
          int *const pl = &i; // 這是一個頂層const , 不能改變p1的值
          const int ci = 42; // 這是一個頂層const , 不能改變ci的值
          const int *p2 = &ci; // 這是一個底層const , 允許改變p2的值
      }
      
    • 常量表達式 : 是指值不會改變並且在編譯過程就能得到計算結果的表達式

      void testConst() {
          const int max_files = 20; //常量表達式
          const int limit = max_files + 1; //常量表達式
      }
    • constexpr變量 : 驗證變量的值是否是一個常量表達式.

      void testConst() {
          constexpr int mf = 20;
          constexpr int limit = mf + 1;
      }
    • 指針和constexpr : constexpr把它所定義的對象置爲了頂層const

      void testConst() {
          const int *p = nullptr; //p是一個指向整型常量的指針
          constexpr int *q = nullptr; //q是一個指向證書的常量指針
      }
  • 處理類型 :

    • 類型別名 : 使用 typedef , using 關鍵字

      void testAlias() {
          typedef double wages; //wages 是 double 的同義詞
          typedef wages bas, *p; // bas 是 double 的同義詞 , p 是 double* 的同義詞
          using SI = Sales_item;  // SI 是 Sales_item 的同義詞
      
          typedef char *pstring;
          const pstring cstr = 0; //cstr是指向char的常量指針
          const pstring *ps; // ps是一個指針 , 它的對象是指向char的常量指針
      }
      
    • auto 類型說明符 : 讓編譯器替我們去分析表達式所屬的類型.

      void testAuto() {
          int i = 2; 
          float p = 1.3;
          auto sum = i + p; // auto 自動推斷出 i + p 的類型
      
          const int c1 = i, &cr = c1;
          auto b = c1; // b 是一個整數
          auto c = cr; // c 是一個整數
          auto d = &i; // d 是一個整型指針
          auto e = &c1; // e 是一個指向整數常量的指針
      }
    • decltype 類型指示符 : 選擇並返回操作數的數據類型 , 但卻不實際計算表達式的值. decltype 作用的表達式是一個變量 , 則返回改變量的類型

      void testDecltype() {
          const int ci = 0, &cj = ci;
          decltype(ci) x = 0; // x 的類型是 const int
          decltype(cj) y = x; // y 的類型是 const int& , y 綁定到變量x
      
          int i = 42, *p = &i, &r = i;
          decltype(r + 0) b; // b代表一個 int類型
          decltype(i) e; // e是一個 int
      }
發佈了82 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章