C++ 学习笔记

C++ 学习笔记

Jiahe Lv
Tianjin, China
创建于
2 min read

C++ 基础

数据类型

基础数据类型

数据类型描述范围
char1字节-128~127
unsigned char1字节0~255
char8_t8位UTF-8编码的unicode字符
char16_t16位UTF-16编码的unicode字符
char32_t32位UTF-32编码的unicode字符
wchar_t单个宽字符,大小取决于编译器
bool1字节true(1)/false(0)
short通常为2字节-32,768~32,767
int通常为4字节-2,147,483,648~2,147,483,647
long (int)通常为4字节-2,147,483,648~2,147,483,647
long long (int)通常为8字节-9,223,372,036,854,775,808~9,223,372,036,854,775,807
unsigned short通常为2字节0~65,535
unsigned (int)通常为4字节0~4,294,967,295
unsigned long (int)通常为4字节0~4,294,967,295
unsigned long long (int)通常为8字节0~18,446,744,073,709,551,615
float单精度浮点数
double双精度浮点数,精度至少与 float 相同
long double长双精度浮点数,精度至少与 double 相同
2的幂 0~256
  0次方:1                                                                                 1位数
  1次方:2                                                                                 1位数
  2次方:4                                                                                 1位数
  3次方:8                                                                                 1位数
  4次方:16                                                                                2位数
  5次方:32                                                                                2位数
  6次方:64                                                                                2位数
  7次方:128                                                                               3位数
  8次方:256                                                                               3位数
  9次方:512                                                                               3位数
 10次方:1024                                                                              4位数
 11次方:2048                                                                              4位数
 12次方:4096                                                                              4位数
 13次方:8192                                                                              4位数
 14次方:16384                                                                             5位数
 15次方:32768                                                                             5位数
 16次方:65536                                                                             5位数    unsigned short的最大值
 17次方:131072                                                                            6位数
 18次方:262144                                                                            6位数
 19次方:524288                                                                            6位数
 20次方:1048576                                                                           7位数
 21次方:2097152                                                                           7位数
 22次方:4194304                                                                           7位数
 23次方:8388608                                                                           7位数
 24次方:16777216                                                                          8位数
 25次方:33554432                                                                          8位数
 26次方:67108864                                                                          8位数
 27次方:134217728                                                                         9位数
 28次方:268435456                                                                         9位数
 29次方:536870912                                                                         9位数
 30次方:1073741824                                                                        10位数
 31次方:2147483648                                                                        10位数
 32次方:4294967296                                                                        10位数   unsigned int的最大值
 33次方:8589934592                                                                        10位数
 34次方:17179869184                                                                       11位数
 35次方:34359738368                                                                       11位数
 36次方:68719476736                                                                       11位数
 37次方:137438953472                                                                      12位数
 38次方:274877906944                                                                      12位数
 39次方:549755813888                                                                      12位数
 40次方:1099511627776                                                                     13位数
 41次方:2199023255552                                                                     13位数
 42次方:4398046511104                                                                     13位数
 43次方:8796093022208                                                                     13位数
 44次方:17592186044416                                                                    14位数
 45次方:35184372088832                                                                    14位数
 46次方:70368744177664                                                                    14位数
 47次方:140737488355328                                                                   15位数
 48次方:281474976710656                                                                   15位数
 49次方:562949953421312                                                                   15位数
 50次方:1125899906842624                                                                  16位数
 51次方:2251799813685248                                                                  16位数
 52次方:4503599627370496                                                                  16位数
 53次方:9007199254740992                                                                  16位数
 54次方:18014398509481984                                                                 17位数
 55次方:36028797018963968                                                                 17位数
 56次方:72057594037927936                                                                 17位数
 57次方:144115188075855872                                                                18位数
 58次方:288230376151711744                                                                18位数
 59次方:576460752303423488                                                                18位数
 60次方:1152921504606846976                                                               19位数
 61次方:2305843009213693952                                                               19位数
 62次方:4611686018427387904                                                               19位数
 63次方:9223372036854775808                                                               19位数
 64次方:18446744073709551616                                                              20位数   unsigned long long的最大值
 65次方:36893488147419103232                                                              20位数
 66次方:73786976294838206464                                                              20位数
 67次方:147573952589676412928                                                             21位数
 68次方:295147905179352825856                                                             21位数
 69次方:590295810358705651712                                                             21位数
 70次方:1180591620717411303424                                                            22位数
 71次方:2361183241434822606848                                                            22位数
 72次方:4722366482869645213696                                                            22位数
 73次方:9444732965739290427392                                                            22位数
 74次方:18889465931478580854784                                                           23位数
 75次方:37778931862957161709568                                                           23位数
 76次方:75557863725914323419136                                                           23位数
 77次方:151115727451828646838272                                                          24位数
 78次方:302231454903657293676544                                                          24位数
 79次方:604462909807314587353088                                                          24位数
 80次方:1208925819614629174706176                                                         25位数
 81次方:2417851639229258349412352                                                         25位数
 82次方:4835703278458516698824704                                                         25位数
 83次方:9671406556917033397649408                                                         25位数
 84次方:19342813113834066795298816                                                        26位数
 85次方:38685626227668133590597632                                                        26位数
 86次方:77371252455336267181195264                                                        26位数
 87次方:154742504910672534362390528                                                       27位数
 88次方:309485009821345068724781056                                                       27位数
 89次方:618970019642690137449562112                                                       27位数
 90次方:1237940039285380274899124224                                                      28位数
 91次方:2475880078570760549798248448                                                      28位数
 92次方:4951760157141521099596496896                                                      28位数
 93次方:9903520314283042199192993792                                                      28位数
 94次方:19807040628566084398385987584                                                     29位数
 95次方:39614081257132168796771975168                                                     29位数
 96次方:79228162514264337593543950336                                                     29位数
 97次方:158456325028528675187087900672                                                    30位数
 98次方:316912650057057350374175801344                                                    30位数
 99次方:633825300114114700748351602688                                                    30位数
100次方:1267650600228229401496703205376                                                   31位数
101次方:2535301200456458802993406410752                                                   31位数
102次方:5070602400912917605986812821504                                                   31位数
103次方:10141204801825835211973625643008                                                  32位数
104次方:20282409603651670423947251286016                                                  32位数
105次方:40564819207303340847894502572032                                                  32位数
106次方:81129638414606681695789005144064                                                  32位数
107次方:162259276829213363391578010288128                                                 33位数
108次方:324518553658426726783156020576256                                                 33位数
109次方:649037107316853453566312041152512                                                 33位数
110次方:1298074214633706907132624082305024                                                34位数
111次方:2596148429267413814265248164610048                                                34位数
112次方:5192296858534827628530496329220096                                                34位数
113次方:10384593717069655257060992658440192                                               35位数
114次方:20769187434139310514121985316880384                                               35位数
115次方:41538374868278621028243970633760768                                               35位数
116次方:83076749736557242056487941267521536                                               35位数
117次方:166153499473114484112975882535043072                                              36位数
118次方:332306998946228968225951765070086144                                              36位数
119次方:664613997892457936451903530140172288                                              36位数
120次方:1329227995784915872903807060280344576                                             37位数
121次方:2658455991569831745807614120560689152                                             37位数
122次方:5316911983139663491615228241121378304                                             37位数
123次方:10633823966279326983230456482242756608                                            38位数
124次方:21267647932558653966460912964485513216                                            38位数
125次方:42535295865117307932921825928971026432                                            38位数
126次方:85070591730234615865843651857942052864                                            38位数
127次方:170141183460469231731687303715884105728                                           39位数
128次方:340282366920938463463374607431768211456                                           39位数
129次方:680564733841876926926749214863536422912                                           39位数
130次方:1361129467683753853853498429727072845824                                          40位数
131次方:2722258935367507707706996859454145691648                                          40位数
132次方:5444517870735015415413993718908291383296                                          40位数
133次方:10889035741470030830827987437816582766592                                         41位数
134次方:21778071482940061661655974875633165533184                                         41位数
135次方:43556142965880123323311949751266331066368                                         41位数
136次方:87112285931760246646623899502532662132736                                         41位数
137次方:174224571863520493293247799005065324265472                                        42位数
138次方:348449143727040986586495598010130648530944                                        42位数
139次方:696898287454081973172991196020261297061888                                        42位数
140次方:1393796574908163946345982392040522594123776                                       43位数
141次方:2787593149816327892691964784081045188247552                                       43位数
142次方:5575186299632655785383929568162090376495104                                       43位数
143次方:11150372599265311570767859136324180752990208                                      44位数
144次方:22300745198530623141535718272648361505980416                                      44位数
145次方:44601490397061246283071436545296723011960832                                      44位数
146次方:89202980794122492566142873090593446023921664                                      44位数
147次方:178405961588244985132285746181186892047843328                                     45位数
148次方:356811923176489970264571492362373784095686656                                     45位数
149次方:713623846352979940529142984724747568191373312                                     45位数
150次方:1427247692705959881058285969449495136382746624                                    46位数
151次方:2854495385411919762116571938898990272765493248                                    46位数
152次方:5708990770823839524233143877797980545530986496                                    46位数
153次方:11417981541647679048466287755595961091061972992                                   47位数
154次方:22835963083295358096932575511191922182123945984                                   47位数
155次方:45671926166590716193865151022383844364247891968                                   47位数
156次方:91343852333181432387730302044767688728495783936                                   47位数
157次方:182687704666362864775460604089535377456991567872                                  48位数
158次方:365375409332725729550921208179070754913983135744                                  48位数
159次方:730750818665451459101842416358141509827966271488                                  48位数
160次方:1461501637330902918203684832716283019655932542976                                 49位数
161次方:2923003274661805836407369665432566039311865085952                                 49位数
162次方:5846006549323611672814739330865132078623730171904                                 49位数
163次方:11692013098647223345629478661730264157247460343808                                50位数
164次方:23384026197294446691258957323460528314494920687616                                50位数
165次方:46768052394588893382517914646921056628989841375232                                50位数
166次方:93536104789177786765035829293842113257979682750464                                50位数
167次方:187072209578355573530071658587684226515959365500928                               51位数
168次方:374144419156711147060143317175368453031918731001856                               51位数
169次方:748288838313422294120286634350736906063837462003712                               51位数
170次方:1496577676626844588240573268701473812127674924007424                              52位数
171次方:2993155353253689176481146537402947624255349848014848                              52位数
172次方:5986310706507378352962293074805895248510699696029696                              52位数
173次方:11972621413014756705924586149611790497021399392059392                             53位数
174次方:23945242826029513411849172299223580994042798784118784                             53位数
175次方:47890485652059026823698344598447161988085597568237568                             53位数
176次方:95780971304118053647396689196894323976171195136475136                             53位数
177次方:191561942608236107294793378393788647952342390272950272                            54位数
178次方:383123885216472214589586756787577295904684780545900544                            54位数
179次方:766247770432944429179173513575154591809369561091801088                            54位数
180次方:1532495540865888858358347027150309183618739122183602176                           55位数
181次方:3064991081731777716716694054300618367237478244367204352                           55位数
182次方:6129982163463555433433388108601236734474956488734408704                           55位数
183次方:12259964326927110866866776217202473468949912977468817408                          56位数
184次方:24519928653854221733733552434404946937899825954937634816                          56位数
185次方:49039857307708443467467104868809893875799651909875269632                          56位数
186次方:98079714615416886934934209737619787751599303819750539264                          56位数
187次方:196159429230833773869868419475239575503198607639501078528                         57位数
188次方:392318858461667547739736838950479151006397215279002157056                         57位数
189次方:784637716923335095479473677900958302012794430558004314112                         57位数
190次方:1569275433846670190958947355801916604025588861116008628224                        58位数
191次方:3138550867693340381917894711603833208051177722232017256448                        58位数
192次方:6277101735386680763835789423207666416102355444464034512896                        58位数
193次方:12554203470773361527671578846415332832204710888928069025792                       59位数
194次方:25108406941546723055343157692830665664409421777856138051584                       59位数
195次方:50216813883093446110686315385661331328818843555712276103168                       59位数
196次方:100433627766186892221372630771322662657637687111424552206336                      60位数
197次方:200867255532373784442745261542645325315275374222849104412672                      60位数
198次方:401734511064747568885490523085290650630550748445698208825344                      60位数
199次方:803469022129495137770981046170581301261101496891396417650688                      60位数
200次方:1606938044258990275541962092341162602522202993782792835301376                     61位数
201次方:3213876088517980551083924184682325205044405987565585670602752                     61位数
202次方:6427752177035961102167848369364650410088811975131171341205504                     61位数
203次方:12855504354071922204335696738729300820177623950262342682411008                    62位数
204次方:25711008708143844408671393477458601640355247900524685364822016                    62位数
205次方:51422017416287688817342786954917203280710495801049370729644032                    62位数
206次方:102844034832575377634685573909834406561420991602098741459288064                   63位数
207次方:205688069665150755269371147819668813122841983204197482918576128                   63位数
208次方:411376139330301510538742295639337626245683966408394965837152256                   63位数
209次方:822752278660603021077484591278675252491367932816789931674304512                   63位数
210次方:1645504557321206042154969182557350504982735865633579863348609024                  64位数
211次方:3291009114642412084309938365114701009965471731267159726697218048                  64位数
212次方:6582018229284824168619876730229402019930943462534319453394436096                  64位数
213次方:13164036458569648337239753460458804039861886925068638906788872192                 65位数
214次方:26328072917139296674479506920917608079723773850137277813577744384                 65位数
215次方:52656145834278593348959013841835216159447547700274555627155488768                 65位数
216次方:105312291668557186697918027683670432318895095400549111254310977536                66位数
217次方:210624583337114373395836055367340864637790190801098222508621955072                66位数
218次方:421249166674228746791672110734681729275580381602196445017243910144                66位数
219次方:842498333348457493583344221469363458551160763204392890034487820288                66位数
220次方:1684996666696914987166688442938726917102321526408785780068975640576               67位数
221次方:3369993333393829974333376885877453834204643052817571560137951281152               67位数
222次方:6739986666787659948666753771754907668409286105635143120275902562304               67位数
223次方:13479973333575319897333507543509815336818572211270286240551805124608              68位数
224次方:26959946667150639794667015087019630673637144422540572481103610249216              68位数
225次方:53919893334301279589334030174039261347274288845081144962207220498432              68位数
226次方:107839786668602559178668060348078522694548577690162289924414440996864             69位数
227次方:215679573337205118357336120696157045389097155380324579848828881993728             69位数
228次方:431359146674410236714672241392314090778194310760649159697657763987456             69位数
229次方:862718293348820473429344482784628181556388621521298319395315527974912             69位数
230次方:1725436586697640946858688965569256363112777243042596638790631055949824            70位数
231次方:3450873173395281893717377931138512726225554486085193277581262111899648            70位数
232次方:6901746346790563787434755862277025452451108972170386555162524223799296            70位数
233次方:13803492693581127574869511724554050904902217944340773110325048447598592           71位数
234次方:27606985387162255149739023449108101809804435888681546220650096895197184           71位数
235次方:55213970774324510299478046898216203619608871777363092441300193790394368           71位数
236次方:110427941548649020598956093796432407239217743554726184882600387580788736          72位数
237次方:220855883097298041197912187592864814478435487109452369765200775161577472          72位数
238次方:441711766194596082395824375185729628956870974218904739530401550323154944          72位数
239次方:883423532389192164791648750371459257913741948437809479060803100646309888          72位数
240次方:1766847064778384329583297500742918515827483896875618958121606201292619776         73位数
241次方:3533694129556768659166595001485837031654967793751237916243212402585239552         73位数
242次方:7067388259113537318333190002971674063309935587502475832486424805170479104         73位数
243次方:14134776518227074636666380005943348126619871175004951664972849610340958208        74位数
244次方:28269553036454149273332760011886696253239742350009903329945699220681916416        74位数
245次方:56539106072908298546665520023773392506479484700019806659891398441363832832        74位数
246次方:113078212145816597093331040047546785012958969400039613319782796882727665664       75位数
247次方:226156424291633194186662080095093570025917938800079226639565593765455331328       75位数
248次方:452312848583266388373324160190187140051835877600158453279131187530910662656       75位数
249次方:904625697166532776746648320380374280103671755200316906558262375061821325312       75位数
250次方:1809251394333065553493296640760748560207343510400633813116524750123642650624      76位数
251次方:3618502788666131106986593281521497120414687020801267626233049500247285301248      76位数
252次方:7237005577332262213973186563042994240829374041602535252466099000494570602496      76位数
253次方:14474011154664524427946373126085988481658748083205070504932198000989141204992     77位数
254次方:28948022309329048855892746252171976963317496166410141009864396001978282409984     77位数
255次方:57896044618658097711785492504343953926634992332820282019728792003956564819968     77位数
256次方:115792089237316195423570985008687907853269984665640564039457584007913129639936    78位数

构造数据类型

数组
结构体
联合体
枚举
指针
引用
字符串

操作符

1. ++ −− // postfix, 后缀
2. ! ++ −− // prefix, 前缀
3. * / %
4. +
5. << >>
6. &
7. ^
8. |
9. = += -= *= /= %= &= |= ^= <<= >>=

流程控制

分支

  1. if-else 语句
  2. switch-case 语句

循环

  1. for 循环
  2. while 循环
  3. do-while 循环
  4. break 语句
  5. continue 语句

异常处理

  1. try-catch 语句
  2. throw 语句

其他

  1. return 语句
  2. goto 语句

函数

main函数

int main(int argc, char** argv){}

main函数是程序的起点。返回值类型为int,表示程序的结束状态。main函数可以没有参数,或者有如上两个参数。 argc给出传递给程序的参数数量,而argv包含这些参数。其中,argv[0]可能是程序名称,也可能是空字符串。所以在需要获取程序名称时,不要依赖argv[0],而应该使用特定平台的函数来获取。包含在argv中的参数需要从索引1开始计算。

命名空间

namespace MyNameSpace {
    //code
}

命名空间用来解决不同代码段之间的命名冲突问题。
要使用命名空间中的成员,可以使用作用域解析运算符::
同一命名空间内的成员可以直接访问,无需使用作用域解析运算符。
可以使用using声明来引入命名空间中的成员,或者使用using namespace来引入整个命名空间。

using MyNameSpace::MyFunction; // 引入命名空间中的特定成员
using namespace MyNameSpace; // 引入整个命名空间

嵌套命名空间

嵌套命名空间是指在一个命名空间内部定义另一个命名空间。每个命名空间用::分隔。

namespace MyNameSpace::Networking::FTP {
    //code
}

这种紧凑的语法在C++17以前不可用,必须使用嵌套的命名空间定义:

namespace MyNameSpace {
    namespace Networking {
        namespace FTP {
            //code
        }
    }
}

命名空间的别名

命名命名空间别名可用于为另一个命名空间提供一个新的、可能更短的名称:

namespace MyNameSpace::Networking::FTP {
    //code
}
namespace FTP = MyNameSpace::Networking::FTP; // 创建命名空间别名
  1. 模板
  2. 命名空间
  3. 智能指针
  4. lambda表达式
  5. 迭代器
  6. 线程
  7. 异步编程
  8. 标准库容器(如vector、list、map等)
  9. 标准库算法(如sort、find、accumulate等)
  10. 标准库输入输出流(如cin、cout、cerr等)
  11. 标准库时间(如chrono库)
  12. 标准库文件系统(如filesystem库)
  13. 标准库正则表达式(如regex库)
  14. 标准库智能指针(如unique_ptr、shared_ptr、weak_ptr等)
  15. 标准库线程(如thread类)
  16. 标准库异步编程(如async、future、promise等)
  17. 标准库元编程(如type_traits、tuple等)
  18. 标准库并发(如mutex、lock_guard、condition_variable等)
  19. 标准库网络编程(如asio库)
  20. 标准库图形编程(如SFML、SDL等)
  21. 标准库数据库编程(如SQLite、MySQL等)
  22. 标准库音频编程(如OpenAL、FMOD等)
  23. 标准库视频编程(如OpenCV、FFmpeg等)
  24. 标准库游戏开发(如Unreal Engine、Unity等)
  25. 标准库嵌入式编程(如Arduino、Raspberry Pi等)
  26. 标准库系统编程(如Windows API、POSIX API等)
  27. 标准库编译器特性(如constexpr、noexcept、decltype等)
  28. 标准库语言特性(如auto、decltype、nullptr等)
  29. 标准库编程范式(如面向对象编程、泛型编程、函数式编程等)
  30. 标准库设计模式(如单例模式、工厂模式、观察者模式等)
  31. 标准库算法设计模式(如分治法、动态规划、贪心算法等)
  32. 标准库数据结构设计模式(如链表、树、图等)
  33. 标准库性能优化(如内存管理、算法优化、并发编程等)
  34. 标准库安全编程(如输入验证、异常处理、资源管理等)
  35. 标准库测试(如单元测试、集成测试、性能测试等)
  36. 标准库调试(如断点调试、日志记录、性能分析等)
  37. 标准库文档(如Doxygen、Sphinx等)
  38. 标准库版本控制(如Git、SVN等)
  39. 标准库持续集成(如Jenkins、Travis CI等)
  40. 标准库部署(如Docker、Kubernetes等)
  41. 标准库维护(如代码重构、技术债务管理等)
  42. 标准库社区(如Stack Overflow、GitHub等)
  43. 标准库开源项目(如Boost、Qt等)
  44. 标准库商业项目(如Microsoft Visual C++、Intel C++ Compiler等)
  45. 标准库教育资源(如C++ Primer、Effective C++等)
  46. 标准库在线资源(如cppreference.com、cplusplus.com等)
  47. 标准库论坛(如C++ Forum、Reddit C++等)
  48. 标准库博客(如Fluent C++、Sutter’s Mill等)
  49. 标准库视频教程(如C++ Weekly、CppCon等)
  50. 标准库会议(如C++Now、CppCon等)
  51. 标准库用户组(如C++ User Group、C++ Standard Committee等)
  52. 标准库认证(如C++ Certified Professional Programmer等)
  53. 标准库职业发展(如C++ Developer、C++ Architect等)
  54. 标准库薪资(如C++ Developer Salary、C++ Architect Salary等)
  55. 标准库未来发展(如C++20、C++23等)
  56. 标准库历史(如C++98、C++11、C++14等)
  57. 标准库未来趋势(如C++23、C++26等)
  58. 标准库最佳实践(如RAII、Pimpl Idiom等)
  59. 标准库反模式(如God Object、Spaghetti Code等)
  60. 标准库设计原则(如SOLID、DRY、KISS等)
  61. 标准库编程风格(如Google C++ Style Guide、LLVM Coding Standards等)
  62. 标准库代码规范(如C++ Core Guidelines、MISRA C++等)
  63. 标准库代码审查(如Code Review、Peer Review等)
  64. 标准库代码质量(如Code Quality、Static Analysis等)
  65. 标准库代码覆盖率(如Code Coverage、Test Coverage等)
  66. 标准库代码复杂度(如Cyclomatic Complexity、Maintainability Index等)
  67. 标准库代码性能(如Performance Profiling、Benchmarking等)
  68. 标准库代码安全(如Static Analysis、Dynamic Analysis等)
  69. 标准库代码可维护性(如Code Refactoring、Technical Debt Management等)
  70. 标准库代码可读性(如Code Readability、Code Comments等)
  71. 标准库代码可重用性(如Code Reusability、Code Modularity等)
  72. 标准库代码可测试性(如Code Testability、Unit Testing等)
  73. 标准库代码可扩展性(如Code Extensibility、Design Patterns等)
  74. 标准库代码可移植性(如Code Portability、Cross-Platform Development等)

Comments