01 c++是什麼?
C++ 是一種靜态類型的、編譯式的、通用的、大小寫敏感的、不規則的程式設計語言,支援過程化程式設計、面向對象程式設計和泛型程式設計;C++ 被認為是一種中級語言,它綜合了進階語言和低級語言的特點;C++ 是 C 的一個超集任何合法的 C 程式都是合法的 C++ 程式。
注意:使用靜态類型的程式設計語言是在編譯時執行類型檢查,而不是在運作時執行類型檢查。
02 其四大特性:封裝、抽象、繼承、動态
03 最新标準2017年c++17,是第五個c++标準
04 大多數C++編譯器不在乎源檔案的擴充名,如果未指定擴充名,則預設使用.cpp
05 using namespace std;告訴編譯器使用std命名空間,命名空間是c++中的概念
06 完整關鍵字查詢見https://www.runoob.com/w3cnote/cpp-keyword-intro.html
07 由于/*...*/不可以嵌套使用,可以使用以下方法實作注釋,且可以實作嵌套:
08 typedef可以為一個已有的類型取一個新名字
09 enum枚舉,在枚舉清單中列出變量所有可能的值,預設情況下第一個名稱的值為0,第二個名稱的值為1,且後一個預設的值總隻比前面一個變量大1;
10 變量是程式可操作的存儲區的名稱,類型主要作用是指定變量存儲的大小和布局
11 定義常量常采用兩種方法,特别注意常量使用大寫字母表示;
使用#define預處理器;
使用const關鍵字;
12 修飾符類型:修飾符 signed、unsigned、long 和 short 可應用于整型,signed 和 unsigned 可應用于字元型或long與short修飾符的前置,long 可應用于雙精度型
13 不常用修飾符:const類型的對象程式執行期間不能被修改改變,volatile表示該變量不需要對改變了進行優化(一般會将變量從記憶體放在寄存器中加快讀取速度),直接從記憶體讀取讀取,restrict修的指針是唯一一種通路它所指向對象的方式;
14 存儲類定義定義了變量或函數的範圍與生命周期。這些說明符放置在它們所修飾的類型之前。常有存儲類有auto、register、static、extern、mutable(易變的)、thread_local,注意從c++17标準之後auto關鍵字不再是c++存儲類說明符,且register關鍵字被棄用;
15 auto在c++98标準中表示自動變量的聲明,這一作用在c++11标準中棄用,c++11标準以來,auto主要有兩個作用,聲明變量時依據初始值自動推導變量類型,一次推導隻能推導同類型變量、聲明函數時,自動推導函數傳回值的占位符;
16 register存儲類用于定義存儲在寄存器而不是ram的局部變量,變量的最大尺寸等于寄存器的大小,其不能不其使用一進制運算符,在c++17中,該關鍵字被棄用;
17 static訓示編譯器在程式的生命周期中保持局部變量的存在,而不需要在每次進入和離開作用域時進行建立和銷毀:下面代碼中i随着首次調用建立為5,之後值為6、7、8.......
18 extern存儲類主要作用是在另一個檔案中聲明一個全局變量或者函數;
19 thread_local存儲類,使用該修飾符的變量隻可以在其建立的線程上通路,變量線上程建立時建立,在銷毀時銷毀,每個線程都有其自己的變量副本;
20 運算符:算術、關系、邏輯、位、指派、雜項運算符
22 邏輯且&&、或||、非!;位運算符與&、或|、異或^、取反~、左移運算符<<、右移運算符>>;
23 雜項運算符:sizeof傳回的是變量的大小的運算符,注意是變量,不是值的長度、condition?x:y、,逗号運算符表示整個逗号表達式的值為逗号分隔清單最後一個表達式的值;成員運算符.和->、強制轉換運算符、&取位址運算符、*指針運算符;
24 運算符優先級中需注意移位運算符低于加減,
25 無線循環while(1)與for( ; ; ),無線循環采用ctrl+c鍵終止無限循環;
26 函數傳值調用,指針調用傳指針,引用調用傳位址;
27 c++11提供了匿名函數的支援,稱為Lambda函數,
28 c++提供了豐富的内置數學函數,頭檔案<cmath>,log取對數,pow乘方,hypot直角三角形求斜邊,sqrt求根,abs求整數絕對值,fabs浮點數的絕對值,floor求小于或等于該值的最大整數;
29 随機數,先調用srand()生成種子,然後調用rand()函數,
30 strcpy(s1, s2) 複制上s2到s1後面;strcat(s1, s2)連接配接字元串s2到s1末尾;strlen(s1)傳回字元串的長度,sizeof是變量的長度,注意區分;
31 extern "C" { } 的目的是為了在c++代碼中調用c寫成的庫檔案;而C想調用C++函數,則需要用包裹函數去包裹C++函數,然後把這個包裹函數以C的規則進行編譯,于是c就可以調用這個包裹函數;
eg::
// world.cpp
執行g++ --shard -o libworld.so world.cpp
cp libworld.so /lib/
// mid.cpp
執行:g++ --share -o libmid.so mid.cpp -lworld
cp libmid.so /lib/
.c程式通過連結二次接口去調用C++庫
// test.c
32
算法庫(Algorithms library)
淺解:提供對容器及序列進行算法操作的函數。大部分由頭檔案 <algorithm> 提供,小部分由 <numeric>、<cstdlib> 提供。
eg:排序操作、二分法查找操作、集合操作、堆操作。
fstream類總結
ofstream(output file stream), ifstream, fstream
在頭檔案fstream中,在fstream類中,用open成員函數打開檔案,實作類與檔案的關聯操作。
- open(filename, mode, prot):對所屬類進行用指定的參數進行特定的檔案關聯
打開方式(mode):(這些方式可以用 '|' 組合起來)
<col>
ios::in
打開輸入(讀)檔案
ios::out
打開輸出(寫)檔案
ios::ate
初始位置為檔案頭
ios::app
所有寫入附加檔案尾部
ios::trunc
如果檔案已存在,删除
ios::binary
以二進制打開
打開屬性(prot):(可以采用'+'進行組合)
普通檔案,打開操作
1
隻讀檔案
2
隐含檔案
4
系統檔案
- close() //關閉檔案
時間相關庫(chrono)
淺解:主要包含 時間間隔Duration、時鐘Clocks和時間點Time point
iomanip庫
應用情況:從文本中提取指定個數的字元串,并在串數組尾添加一個空格
C++11标準新特性簡記
最近,學Vslam時遇到許多陌生用法,即為C++11,于此簡記之。
引自:javascript:void(0)
1.nuiiprt
C++11引入nullptr是為了解決NULL即可定義為空指針,又可定義為0的混亂情況。
2.auto與decltype
auto常用于推算左值的類型,decltype是推算某公式用于另值的聲明,細則點連結;
eg:auto pd = 0.618033; //pd的類似為double
decltype(yx + pd) h; //h的類型為公式加法值類型
3.尖括号 “ >”
c數組:
數組名表示首行首元素位址,步長為元素;&數組名表示數組首行首位址,步長為整個數組。
首行首位址變為首行首元素位址:*&數組名,*&相當于互相抵消。
數組指針是指向數組的指針變量:typedef int AC [10]; AC *p;不常用
()[]同級,優先級從左往右;()有*,它是一個指針,[]代表數組;指向數組的指針變量,[]中的數字代表指針+1的步長,int (*p)[10]; p = &a; 常用。
typedef int (*p)[10];p d; 常用
多元數組名是一個數組指針,指向數組的指針,步長為一行位元組長度,相當于一維的&數組名;
注意,數組指針定義時一維數組p = &a;多元數組p = a;
做形參時,一維數組名退化為指針,多元數組名退化為數組指針;數組指針可以指定步長;
指針數組(是一個數組,隻是每個元素都是指針)
[]優先級比*高 : char *str[] = {''22'', ''33''};
常用字元串處理函數
strstr、strcmp、strcpy
手工二維記憶體
char **p3 = (char **)malloc(3 * sizeof(char *));
for(i = 0;i < 3;i++)
{
p3[i] = (char *)malloc(3 * sizeof(char *));
}
伺服器項目:https://github.com/linyacool/WebServer
誰終将聲震人間,必長久深自緘默;誰終将點燃閃電,必長久如雲漂泊。