C++基礎(chǔ) 2020-11-03

thread_local 存儲(chǔ)類

  • 使用 thread_local 說(shuō)明符聲明的變量?jī)H可在它在其創(chuàng)建的線程上訪問(wèn)
  • 變量在創(chuàng)建線程時(shí)創(chuàng)建,并在銷(xiāo)毀線程時(shí)銷(xiāo)毀
  • thread_local 說(shuō)明符可以與 static 或 extern 合并
  • 每個(gè)線程都有其自己的變量副本

位運(yùn)算符

  • ^ : binary加
  • << : 向左移動(dòng)指定的位數(shù)

雜項(xiàng)運(yùn)算符

  • sizeof : 返回變量的大小
  • , : 順序執(zhí)行一系列運(yùn)算。整個(gè)逗號(hào)表達(dá)式的值是以逗號(hào)分隔的列表中的最后一個(gè)表達(dá)式的值
  • Cast : 強(qiáng)制轉(zhuǎn)換運(yùn)算符把一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型。例如,int(2.2000) 將返回 2

C++ 函數(shù)

  • 每個(gè) C++ 程序都至少有一個(gè)函數(shù),即主函數(shù) main()
  • 可以把代碼劃分到不同的函數(shù)中
  • 函數(shù)聲明告訴編譯器函數(shù)的名稱、返回類型和參數(shù)
  • C++ 標(biāo)準(zhǔn)庫(kù)提供了大量的程序可以調(diào)用的內(nèi)置函數(shù)。例如,函數(shù) strcat() 用來(lái)連接兩個(gè)字符串,函數(shù) memcpy() 用來(lái)復(fù)制內(nèi)存到另一個(gè)位置
  • 函數(shù)還有很多叫法,比如方法、子例程或程序
  • 向參數(shù)傳遞一個(gè)值,這個(gè)值被稱為實(shí)際參數(shù)
  • 函數(shù)聲明會(huì)告訴編譯器函數(shù)名稱及如何調(diào)用函數(shù)
  • 在函數(shù)聲明中,參數(shù)的名稱并不重要,只有參數(shù)的類型是必需的
  • 在一個(gè)源文件中定義函數(shù)且在另一個(gè)文件中調(diào)用函數(shù)時(shí),函數(shù)聲明是必需的。在這種情況下,您應(yīng)該在調(diào)用函數(shù)的文件頂部聲明函數(shù)

函數(shù)參數(shù)

  • 如果函數(shù)要使用參數(shù),則必須聲明接受參數(shù)值的變量。這些變量稱為函數(shù)的形式參數(shù)
  • 形式參數(shù)就像函數(shù)內(nèi)的其他局部變量,在進(jìn)入函數(shù)時(shí)被創(chuàng)建,退出函數(shù)時(shí)被銷(xiāo)毀

三種向函數(shù)傳遞參數(shù)的方式:

  • 傳值調(diào)用 : 該方法把參數(shù)的實(shí)際值賦值給函數(shù)的形式參數(shù)。在這種情況下,修改函數(shù)內(nèi)的形式參數(shù)對(duì)實(shí)際參數(shù)沒(méi)有影響
  • 指針調(diào)用 : 該方法把參數(shù)的地址賦值給形式參數(shù)。在函數(shù)內(nèi),該地址用于訪問(wèn)調(diào)用中要用到的實(shí)際參數(shù)。這意味著,修改形式參數(shù)會(huì)影響實(shí)際參數(shù)
  • 引用調(diào)用 : 該方法把參數(shù)的引用賦值給形式參數(shù)。在函數(shù)內(nèi),該引用用于訪問(wèn)調(diào)用中要用到的實(shí)際參數(shù)。這意味著,修改形式參數(shù)會(huì)影響實(shí)際參數(shù)
  • 默認(rèn)情況下,C++ 使用傳值調(diào)用來(lái)傳遞參數(shù)

參數(shù)的默認(rèn)值

  • 可以為參數(shù)列表中后邊的每一個(gè)參數(shù)指定默認(rèn)值
  • 如果實(shí)際參數(shù)的值留空,則使用這個(gè)默認(rèn)值
  • 在函數(shù)定義中使用賦值運(yùn)算符來(lái)為參數(shù)賦值

Lambda 函數(shù)與表達(dá)式

  • C++11 提供了對(duì)匿名函數(shù)的支持
  • Lambda 表達(dá)式把函數(shù)看作對(duì)象,比如可以將它們賦給變量和作為參數(shù)傳遞,還可以像函數(shù)一樣對(duì)其求值
  • [capture](parameters)->return-type{body}
  • [](int x, int y){ return x < y ; }
  • 在Lambda表達(dá)式內(nèi)可以訪問(wèn)當(dāng)前作用域的變量,這是Lambda表達(dá)式的閉包(Closure)行為
  • 與JavaScript閉包不同,C++變量傳遞有傳值和傳引用的區(qū)別,可以通過(guò)前面的[]來(lái)指定
  • [] // 沒(méi)有定義任何變量。使用未定義變量會(huì)引發(fā)錯(cuò)誤
  • [x, &y] // x以傳值方式傳入(默認(rèn)),y以引用方式傳入
  • [&] // 任何被使用到的外部變量都隱式地以引用方式加以引用
  • [=] // 任何被使用到的外部變量都隱式地以傳值方式加以引用
  • [&, x] // x顯式地以傳值方式加以引用。其余變量以引用方式加以引用
  • [=, &z] // z顯式地以引用方式加以引用。其余變量以傳值方式加以引用
  • 對(duì)于[=]或[&]的形式,lambda 表達(dá)式可以直接使用 this 指針。但是,對(duì)于[]的形式,如果要使用 this 指針,必須顯式傳入

C++ 數(shù)學(xué)運(yùn)算

  • 需要引用數(shù)學(xué)頭文件 <cmath>
  • hypot(double, double); 返回兩個(gè)參數(shù)的平方總和的平方根
  • rand(),該函數(shù)只返回一個(gè)偽隨機(jī)數(shù)
  • 生成隨機(jī)數(shù)之前必須先調(diào)用 srand() 函數(shù)
    // 設(shè)置種子 
    srand( (unsigned)time( NULL ) );
    cout<<rand();

C++ 數(shù)組

  • 所有的數(shù)組都是由連續(xù)的內(nèi)存位置組成
  • 最低的地址對(duì)應(yīng)第一個(gè)元素,最高的地址對(duì)應(yīng)最后一個(gè)元素
  • 省略掉了數(shù)組的大小,數(shù)組的大小則為初始化時(shí)元素的個(gè)數(shù)
  • C++ setw() 函數(shù)用于設(shè)置字段的寬度, n 表示寬度
  • 當(dāng)后面緊跟著的輸出字段長(zhǎng)度小于 n 的時(shí)候,在該字段前面用空格補(bǔ)齊,當(dāng)輸出字段長(zhǎng)度大于 n 時(shí),全部整體輸出
  • 可以 setfill() 配合使用設(shè)置其他字符填充

多維數(shù)組

  • type name[size1][size2]...[sizeN];
  • 內(nèi)部嵌套的括號(hào)是可選的
  • C++ 不允許返回一個(gè)完整的數(shù)組作為函數(shù)的參數(shù)。但是,您可以通過(guò)指定不帶索引的數(shù)組名來(lái)返回一個(gè)指向數(shù)組的指針
  • C++ 不支持在函數(shù)外返回局部變量的地址,除非定義局部變量為 static 變量
    int * getRandom( )
    {
      static int  r[10];
     
      // 設(shè)置種子
      srand( (unsigned)time( NULL ) );
      for (int i = 0; i < 10; ++i)
      {
        r[i] = rand();
        cout << r[i] << endl;
      }
     
      return r;
    }
  • C++ 中您可以通過(guò)指定不帶索引的數(shù)組名來(lái)傳遞一個(gè)指向數(shù)組的指針
  • C++ 傳數(shù)組給一個(gè)函數(shù),數(shù)組類型自動(dòng)轉(zhuǎn)換為指針類型,因而傳的實(shí)際是地址
  • C++ 不會(huì)對(duì)形式參數(shù)執(zhí)行邊界檢查
  • 數(shù)組名是指向數(shù)組中第一個(gè)元素的常量指針

在函數(shù)中傳遞一個(gè)一維數(shù)組作為參數(shù),您必須以下面三種方式來(lái)聲明函數(shù)形式參數(shù):

  • 形式參數(shù)是一個(gè)指針myFunction(int *param)
  • 形式參數(shù)是一個(gè)已定義大小的數(shù)組 myFunction(int param[10])
  • 形式參數(shù)是一個(gè)未定義大小的數(shù)組 myFunction(int param[])

字符串

  • C 風(fēng)格的字符串
  • 字符串實(shí)際上是使用 null 字符 '\0' 終止的一維字符數(shù)組
  • 不需要把 null 字符放在字符串常量的末尾,C++ 編譯器會(huì)在初始化數(shù)組時(shí),自動(dòng)把 '\0' 放在字符串的末尾
  • strcpy,strcat,strlen,strcmp,strchr,strstr
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容