C++ 学习笔记
C++ 学习笔记
Jiahe Lv
Tianjin, China
创建于
2 min read
C++ 基础
数据类型
基础数据类型
| 数据类型 | 描述 | 范围 |
|---|---|---|
| char | 1字节 | -128~127 |
| unsigned char | 1字节 | 0~255 |
| char8_t | 8位UTF-8编码的unicode字符 | |
| char16_t | 16位UTF-16编码的unicode字符 | |
| char32_t | 32位UTF-32编码的unicode字符 | |
| wchar_t | 单个宽字符,大小取决于编译器 | |
| bool | 1字节 | 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. = += -= *= /= %= &= |= ^= <<= >>=
流程控制
分支
- if-else 语句
- switch-case 语句
循环
- for 循环
- while 循环
- do-while 循环
- break 语句
- continue 语句
异常处理
- try-catch 语句
- throw 语句
其他
- return 语句
- 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; // 创建命名空间别名
- 模板
- 命名空间
- 智能指针
- lambda表达式
- 迭代器
- 线程
- 异步编程
- 标准库容器(如vector、list、map等)
- 标准库算法(如sort、find、accumulate等)
- 标准库输入输出流(如cin、cout、cerr等)
- 标准库时间(如chrono库)
- 标准库文件系统(如filesystem库)
- 标准库正则表达式(如regex库)
- 标准库智能指针(如unique_ptr、shared_ptr、weak_ptr等)
- 标准库线程(如thread类)
- 标准库异步编程(如async、future、promise等)
- 标准库元编程(如type_traits、tuple等)
- 标准库并发(如mutex、lock_guard、condition_variable等)
- 标准库网络编程(如asio库)
- 标准库图形编程(如SFML、SDL等)
- 标准库数据库编程(如SQLite、MySQL等)
- 标准库音频编程(如OpenAL、FMOD等)
- 标准库视频编程(如OpenCV、FFmpeg等)
- 标准库游戏开发(如Unreal Engine、Unity等)
- 标准库嵌入式编程(如Arduino、Raspberry Pi等)
- 标准库系统编程(如Windows API、POSIX API等)
- 标准库编译器特性(如constexpr、noexcept、decltype等)
- 标准库语言特性(如auto、decltype、nullptr等)
- 标准库编程范式(如面向对象编程、泛型编程、函数式编程等)
- 标准库设计模式(如单例模式、工厂模式、观察者模式等)
- 标准库算法设计模式(如分治法、动态规划、贪心算法等)
- 标准库数据结构设计模式(如链表、树、图等)
- 标准库性能优化(如内存管理、算法优化、并发编程等)
- 标准库安全编程(如输入验证、异常处理、资源管理等)
- 标准库测试(如单元测试、集成测试、性能测试等)
- 标准库调试(如断点调试、日志记录、性能分析等)
- 标准库文档(如Doxygen、Sphinx等)
- 标准库版本控制(如Git、SVN等)
- 标准库持续集成(如Jenkins、Travis CI等)
- 标准库部署(如Docker、Kubernetes等)
- 标准库维护(如代码重构、技术债务管理等)
- 标准库社区(如Stack Overflow、GitHub等)
- 标准库开源项目(如Boost、Qt等)
- 标准库商业项目(如Microsoft Visual C++、Intel C++ Compiler等)
- 标准库教育资源(如C++ Primer、Effective C++等)
- 标准库在线资源(如cppreference.com、cplusplus.com等)
- 标准库论坛(如C++ Forum、Reddit C++等)
- 标准库博客(如Fluent C++、Sutter’s Mill等)
- 标准库视频教程(如C++ Weekly、CppCon等)
- 标准库会议(如C++Now、CppCon等)
- 标准库用户组(如C++ User Group、C++ Standard Committee等)
- 标准库认证(如C++ Certified Professional Programmer等)
- 标准库职业发展(如C++ Developer、C++ Architect等)
- 标准库薪资(如C++ Developer Salary、C++ Architect Salary等)
- 标准库未来发展(如C++20、C++23等)
- 标准库历史(如C++98、C++11、C++14等)
- 标准库未来趋势(如C++23、C++26等)
- 标准库最佳实践(如RAII、Pimpl Idiom等)
- 标准库反模式(如God Object、Spaghetti Code等)
- 标准库设计原则(如SOLID、DRY、KISS等)
- 标准库编程风格(如Google C++ Style Guide、LLVM Coding Standards等)
- 标准库代码规范(如C++ Core Guidelines、MISRA C++等)
- 标准库代码审查(如Code Review、Peer Review等)
- 标准库代码质量(如Code Quality、Static Analysis等)
- 标准库代码覆盖率(如Code Coverage、Test Coverage等)
- 标准库代码复杂度(如Cyclomatic Complexity、Maintainability Index等)
- 标准库代码性能(如Performance Profiling、Benchmarking等)
- 标准库代码安全(如Static Analysis、Dynamic Analysis等)
- 标准库代码可维护性(如Code Refactoring、Technical Debt Management等)
- 标准库代码可读性(如Code Readability、Code Comments等)
- 标准库代码可重用性(如Code Reusability、Code Modularity等)
- 标准库代码可测试性(如Code Testability、Unit Testing等)
- 标准库代码可扩展性(如Code Extensibility、Design Patterns等)
- 标准库代码可移植性(如Code Portability、Cross-Platform Development等)