C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- å鿍¡æ¿(C++14 èµ·)
- æ´æ°åé¢é
- èååå§å
- æ¯è¾è¿ç®ç¬¦
- é»è®¤æ¯è¾(C++20 èµ·)
- 转ä¹åºå
- for 循ç¯
- while 循ç¯
- ç¨æ·å®ä¹è½¬æ¢
- SFINAE
- 䏻彿°
- ASCII ç 表
- æ è¯ç¬¦
- ç±»å
- å 忍¡å
- 对象
- åºæ¬æ¦å¿µ
- 表达å¼
- 声æ
- åå§å
- 彿°
- è¯å¥
- ç±»
- è¿ç®ç¬¦éè½½
- 模æ¿
- å¼å¸¸
- äºå¡æ§å å
- å ä½ç¬¦ç±»å说æç¬¦ (C++11 èµ·)
- decltype 说æç¬¦
- 彿°å£°æ
- final 说æç¬¦ (C++11 èµ·)
- override 说æç¬¦(C++11 èµ·)
- å¼ç¨å£°æ
- ç§»å¨æé 彿°
- ç§»å¨èµå¼è¿ç®ç¬¦
- æä¸¾å£°æ
- constexpr 说æç¬¦(C++11 èµ·)
- å表åå§å (C++11 èµ·)
- æé 彿°ä¸æååå§åå¨å表
- using 声æ
- nullptrï¼æéåé¢é
- åºç¡ç±»å
- ç±»åå«åï¼å«å模ç (C++11 èµ·)
- å½¢åå
- èåä½å£°æ
- å符串åé¢é
- ç¨æ·å®ä¹åé¢é (C++11 èµ·)
- 屿§è¯´æç¬¦åºå(C++11 èµ·)
- Lambda è¡¨è¾¾å¼ (C++11 èµ·)
- noexcept 说æç¬¦ (C++11 èµ·)
- noexcept è¿ç®ç¬¦ (C++11 èµ·)
- alignof è¿ç®ç¬¦(C++11 èµ·)
- alignas 说æç¬¦ (C++11 èµ·)
- åå¨ç±»è¯´æç¬¦
- åºäºèå´ç for å¾ªç¯ (C++11 èµ·)
- static_assert 声æ
- éå¼è½¬æ¢
- 代ç¨è¿ç®ç¬¦è¡¨ç¤º
- èªå¢/èªåè¿ç®ç¬¦
- æå 表达å¼(C++17 èµ·)
- 类模æ¿å®åæ¨å¯¼(C++17 èµ·)
- 模æ¿å½¢å䏿¨¡æ¿å®å
- if è¯å¥
- inline 说æç¬¦
- ç»æåç»å®å£°æ (C++17 èµ·)
- switch è¯å¥
- å符åé¢é
- å½å空é´
- æ±å¼é¡ºåº
- å¤å¶æ¶é¤
- consteval 说æç¬¦ (C++20 èµ·)
- constinit 说æç¬¦ (C++20 èµ·)
- åç¨ (C++20)
- 模å (C++20 èµ·)
- 约æä¸æ¦å¿µ (C++20 èµ·)
- new 表达å¼
- do-while 循ç¯
- continue è¯å¥
- break è¯å¥
- goto è¯å¥
- return è¯å¥
- 卿å¼å¸¸è¯´æ
- throw 表达å¼
- try å
- å½å空é´å«å
- 类声æ
- cvï¼const ä¸ volatileï¼ç±»åéå®ç¬¦
- é»è®¤åå§å
- å¼åå§å(C++03 èµ·)
- é¶åå§å
- å¤å¶åå§å
- ç´æ¥åå§å
- 常éåå§å
- å¼ç¨åå§å
- å¼ç±»å«
- C++ è¿ç®ç¬¦ä¼å 级
- å¸å°åé¢é
- æµ®ç¹åé¢é
- typedef 说æç¬¦
- æ¾å¼ç±»å转æ¢
- static_cast 转æ¢
- dynamic_cast 转æ¢
- const_cast 转æ¢
- reinterpret_cast 转æ¢
- delete 表达å¼
- æé 彿°ä¸æååå§åå¨å表
- this æé
- 访é®è¯´æç¬¦
- åå 声æ
- virtual 彿°è¯´æç¬¦
- explicit 说æç¬¦
- éææå
- é»è®¤æé 彿°
- å¤å¶æé 彿°
- å¤å¶èµå¼è¿ç®ç¬¦
- ææå½æ°
- 类模æ¿
- 彿°æ¨¡æ¿
- æ¾å¼ï¼å ¨ï¼æ¨¡æ¿ç¹å
- æ±ç¼å£°æ
- C++ çåå²
- ä½ç¨å
- çåæ
- å®ä¹ä¸åä¸å®ä¹è§åï¼ODRï¼
- å忥æ¾
- æéå®çå忥æ¾
- æ éå®çå忥æ¾
- å¦åè§å
- æªå®ä¹è¡ä¸º
- ç¿»è¯é¶æ®µ
- 常é表达å¼
- èµå¼è¿ç®ç¬¦
- ç®æ¯è¿ç®ç¬¦
- é»è¾è¿ç®ç¬¦
- æå访é®è¿ç®ç¬¦
- å ¶ä»è¿ç®ç¬¦
- sizeof è¿ç®ç¬¦
- typeid è¿ç®ç¬¦
- æé声æ
- æ°ç»å£°æ
- è¯è¨é¾æ¥
- 详述类å说æç¬¦
- é»è®¤å®å
- åé¿å®å
- å®åä¾èµæ¥æ¾
- éè½½å³è®®
- éè½½å½æ°çå°å
- æ³¨å ¥ç±»å
- ééææ°æ®æå
- ééææå彿°
- åµå¥ç±»
- æ´¾çç±»
- 空åºç±»ä¼å
- æ½è±¡ç±»
- ä½å
- è½¬æ¢æé 彿°
- æå模æ¿
- 模æ¿å®åæ¨å¯¼
- é¨å模æ¿ç¹å
- sizeof... è¿ç®ç¬¦
- å¾ å³å
- 彿° try å
- æ©å å½åç©ºé´ std
- åæ¯ç¼©å
- RAII
- ä¸/äº/é¶ä¹æ³å
- PImpl
- é¶å¼éåå
- ç±»å
- éå¼è½¬æ¢
- 注é
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >C++ è¯è¨ > 声æ
声æ
声æå°ååå¼å ¥ï¼æåå¼å ¥ï¼å° C++ ç¨åºä¸ãæ¯ç§å®ä½çå£°ææ¹å¼é½ä¸åãå®ä¹æ¯è¶³ä»¥ä½¿è¯¥ååææ è¯çå®ä½è¢«ä½¿ç¨ç声æã
å£°ææ¯ä¸åä¹ä¸ï¼
- 彿°å®ä¹
- 模æ¿å£°æï¼å æ¬é¨å模æ¿ç¹åï¼
- æ¾å¼æ¨¡æ¿å®ä¾å
- æ¾å¼æ¨¡æ¿ç¹å
- å½å空é´å®ä¹
- è¿æ¥è¯´æ
- 屿§å£°æï¼attr
;ï¼(C++11 èµ·) - 空声æï¼
;ï¼(C++11 èµ·) - æ 声æè¯´æç¬¦åºå ç彿°å£°æï¼
attr(å¯é) 声æç¬¦ ;
|
|||||||||
| attr (C++11 èµ·) | - | ä»»ææ°é屿§çåºå |
| 声æç¬¦ | - | 彿°å£°æç¬¦ã |
- æ¤å£°æå¿ 须声ææé 彿°ãææå½æ°æç¨æ·å®ä¹çç±»å转æ¢å½æ°ãå®åªè½ç¨ä½æ¨¡æ¿å£°æãæ¾å¼ç¹åææ¾å¼å®ä¾åçä¸é¨åã
- å声æï¼è½åºç°äºåä¸ç声æï¼ï¼å®å¯ä»¥æ¯ä¸åä¹ä¸ï¼
- æ±ç¼å£°æ
- ç±»åå«å声æ (C++11 èµ·)
- å½å空é´å«åå®ä¹
- using 声æ
- using æä»¤
- static_assert 声æ (C++11 èµ·)
- ä¸å¯è§ enum 声æ (C++11 èµ·)
- ç®å声æ
ç®å声æ
ç®åå£°ææ¯å¼å ¥ãå建并å¯éå°åå§åä¸ä¸ªææ°ä¸ªæ è¯ç¬¦ï¼å ¸åå°ä¸ºåéï¼çè¯å¥ã
声æè¯´æç¬¦åºå åå§å声æç¬¦å表(å¯é) ;
|
(1) | ||||||||
attr 声æè¯´æç¬¦åºå åå§å声æç¬¦å表;
|
(2) | ||||||||
| attr (C++11 èµ·) | - | 任使°é屿§çåºå |
| 声æè¯´æç¬¦åºåï¼decl-specifier-seqï¼ | - | 说æç¬¦ï¼specifierï¼çåºåï¼è§ä¸æï¼ã |
| åå§å声æç¬¦å表ï¼init-declarator-listï¼ | - | 带å¯éçåå§åå¨ï¼initializerï¼ç声æç¬¦ï¼declaratorï¼çéå·åéå表ã åå§å声æç¬¦å表 å¨å£°æå ·åç class/struct/union æå ·åæä¸¾æ¶æ¯å¯éç |
ç»æåç»å®å£°æäº¦ä¸ºç®å声æã (C++17 èµ·)
说æç¬¦
声æè¯´æç¬¦ï¼å£°æè¯´æç¬¦åºåï¼æ¯ä¸å以空ç½åéç说æç¬¦çåºåï¼é¡ºåºä»»æï¼
-
typedef说æç¬¦ãè¥åå¨ï¼åæ´ä¸ªå£°ææ¯ typedef 声æï¼ä¸æ¯ä¸ªå£°æç¬¦å¼å ¥ä¸ä¸ªæ°çç±»ååï¼èé对象æå½æ°ã - 彿°è¯´æç¬¦ï¼
inlineãvirtualãexplicitï¼ï¼ä» å¨å½æ°å£°æä¸å 许使ç¨ã
|
(C++17 èµ·) |
-
friend说æç¬¦å 许å¨ç±»å彿°å£°æä¸ä½¿ç¨ã
|
(C++11 èµ·) |
| (C++20 èµ·) |
- åå¨ç±»è¯´æç¬¦ï¼registerãstaticãthread_local (C++11 èµ·)ãexternãmutableï¼ãä»
å
许使ç¨ä¸ä¸ªåå¨ç±»è¯´æç¬¦ï¼ä½
thread_localå¯ä»¥ä¸externæstaticä¸ååºç°ã - ç±»å说æç¬¦ï¼ç±»å说æç¬¦åºåï¼ï¼æåä¸ä¸ªç±»åç说æç¬¦çåºåã声ææå¼å ¥çæ¯ä¸ªå®ä½å为æ¤ç±»åï¼å¯éå°ä¸ºå£°æç¬¦æä¿®é¥°ï¼è§ä¸æï¼ãè¿ä¸ªè¯´æç¬¦åºåä¹è¢«ç±»åæ è¯ï¼type-idï¼æç¨ã坿ä¸å说æç¬¦æ¯ ç±»å说æç¬¦åºå çä¸é¨åï¼é¡ºåºä»»æï¼
- 类说æç¬¦
- æä¸¾è¯´æç¬¦
- ç®åç±»å说æç¬¦
| (C++11 èµ·) |
- å å声æè¿çç±»åï¼å¯éå°æéå®ï¼
- å å声æè¿çæä¸¾åï¼å¯éå°æéå®ï¼
- å å声æè¿ç typedef åæç±»åå«å (C++11 èµ·)ï¼å¯éå°æéå®ï¼
- 带模æ¿å®åçæ¨¡æ¿åï¼å¯éå°æéå®ï¼å¯éå°ç¨ template æ¶æ§ä¹ç¬¦ï¼
|
(C++17 èµ·) |
-
- å
³é®è¯ classãstruct æ unionï¼åéå
åå·²å®ä¹ä¸º
classãstructæunionåçæ è¯ç¬¦ï¼å¯éå°æéå®ï¼ã - å ³é®è¯ classãstruct æ unionï¼åé带模æ¿å®åçãå åå·²å®ä¹ä¸ºç±»æ¨¡æ¿ååçæ¨¡æ¿åï¼å¯éå°æéå®ï¼å¯éå°ç¨ template æ¶æ§ä¹ç¬¦ï¼ã
- å ³é®è¯ enum åéå åå·²å®ä¹ä¸ºæä¸¾åçæ è¯ç¬¦ï¼å¯éå°æéå®ï¼ã
- å
³é®è¯ classãstruct æ unionï¼åéå
åå·²å®ä¹ä¸º
- æ¯ä¸ª 声æè¯´æç¬¦åºå ä¸åªå 许ä¸ä¸ªç±»å说æç¬¦ï¼ä½æä»¥ä¸ä¾å¤ï¼
- -
constè½ä¸èªèº«å¤çä»»ä½ç±»å说æç¬¦ç»åã - -
volatileè½ä¸èªèº«å¤çä»»ä½ç±»å说æç¬¦ç»åã - -
signedæunsignedè½ä¸charãlongãshortæintç»åã - -
shortælongè½ä¸intç»åã - -
longè½ä¸doubleç»åã
|
(C++11 èµ·) |
屿§å¯åºç°äº 声æè¯´æç¬¦åºå ä¸ï¼è¯¥æ åµä¸å®ä»¬åºç¨äºå ¶ä¹åç说æç¬¦æç¡®å®çç±»åã
|
声æè¯´æç¬¦åºå ä¸ä»
æçå
许两次åºç°ç说æç¬¦æ¯ |
(C++17 èµ·) |
声æç¬¦
åå§å声æç¬¦å表ï¼init-declarator-listï¼æ¯ä¸æå¤ä¸ª åå§å声æç¬¦ï¼init-declaratorï¼ çéå·åéå表ï¼å®æ¥æä¸åè¯æ³ï¼
| 声æç¬¦ åå§åå¨(å¯é) | (1) | ||||||||
| 声æç¬¦ requires-åå¥ | (2) | (C++20 èµ·) | |||||||
| 声æç¬¦ï¼declaratorï¼ | - | 声æç¬¦ |
| åå§åå¨ï¼initializerï¼ | - | å¯éçåå§åå¨ï¼é¤éå¨å¿ è¦çåºåï¼ä¾å¦åå§åå¼ç¨æ const 对象æ¶ï¼ãç»èè§åå§åã |
| requires-åå¥(C++20) | - | requires åå¥ï¼å彿°å£°ææ·»å å¶çº¦ |
åå§å声æç¬¦åºå S D1, D2, D3; ä¸çæ¯ä¸ª åå§å声æç¬¦ï¼åæç §å¦å宿¯æ¥æç¸å说æç¬¦çå¤ç«å£°ææ¥å¤çï¼S D1; S D2; S D3;ã
æ¯ä¸ªå£°æç¬¦æ°å¥½å¼å ¥ä¸ä¸ªå¯¹è±¡ãå¼ç¨ã彿°æï¼å¯¹äº typedef 声æï¼ç±»åå«åï¼å ¶ç±»åç± å£°æè¯´æç¬¦åºå æä¾ï¼å¹¶å¯éå°è¢«å£°æç¬¦ä¸çè¿ç®ç¬¦ï¼å¦ &ï¼ï½çå¼ç¨ï¼æ []ï¼ï½çæ°ç»ï¼æ ()ï¼è¿åï½ç彿°ï¼æä¿®é¥°ãå¯ä»¥éå½åºç¨è¿äºå£°æç¬¦ï¼å¦ä¸æç¤ºã
声æç¬¦ æ¯ä¸åä¹ä¸ï¼
| æ é宿 è¯ attr(å¯é) | (1) | ||||||||
| æé宿 è¯ attr(å¯é) | (2) | ||||||||
... æ è¯ç¬¦ attr(å¯é)
|
(3) | (C++11 èµ·) | |||||||
* attr(å¯é) cv(å¯é) 声æç¬¦
|
(4) | ||||||||
åµå¥å说æç¬¦ * attr(å¯é) cv(å¯é) 声æç¬¦
|
(5) | ||||||||
& attr(å¯é) 声æç¬¦
|
(6) | ||||||||
&& attr(å¯é) 声æç¬¦
|
(7) | (C++11 èµ·) | |||||||
noptr-声æç¬¦ [ constexpr(å¯é) ] attr(å¯é)
|
(8) | ||||||||
noptr-声æç¬¦ ( å½¢åå表 ) cv(å¯é) ref(å¯é) å¼å¸¸è¯´æ(å¯é) attr(å¯é)
|
(9) | ||||||||
D 声æä¸ºæå 声æè¯´æç¬¦åºå æç¡®å®çç±»å S çæéãD 声æä¸ºæå C ä¸çç±»å为 声æè¯´æç¬¦åºå æç¡®å®çç±»å S çæåçæéãåµå¥å说æç¬¦ 为åååä½ç¨åè§£æè¿ç®ç¬¦ :: çåºåD 声æä¸ºå° 声æè¯´æç¬¦åºå æç¡®å®çç±»å S çå·¦å¼å¼ç¨ãD 声æä¸ºå° 声æè¯´æç¬¦åºå æç¡®å®çç±»å S çå³å¼å¼ç¨ãæææ åµä¸ï¼attr å为å¯éç屿§çåºåãå½å ¶ç´§è·æ è¯ç¬¦ä¹ååºç°æ¶ï¼å®åºç¨äºæå£°æç对象ã
cv æ¯ const ä¸ volatile éå®ç¬¦çåºåï¼å ¶ä¸ä»»ä¸éå®ç¬¦å¨åºåä¸è³å¤åºç°ä¸æ¬¡ã
| æ¬èæªå®æ åå ï¼è§£éååéèè§åï¼åé/彿°å£°æå¦ä½éèååçç±»ï¼èé typedefï¼ |
注解
å声æåºç°å¨ä»£ç åå ï¼èå½å£°æä¸å¼å ¥çæ è¯ç¬¦ä¹åå·²å¨æä¸ªå¤å±ä»£ç åä¸å£°ææ¶ï¼è¯¥ä»£ç åçå©ä½é¨åä¸å¤å±å£°æè¢«éèã
è¥å£°æå¼å ¥å ·æèªå¨å卿çåéï¼åå®å¨æ§è¡å ¶å£°æè¯å¥æ¶åå§åãéåºä»£ç åæ¶ï¼ææå£°æäºè¯¥åä¸çèªå¨åéè¢«ä»¥å ¶åå§å顺åºçç¸å顺åºéæ¯ï¼æ å ³ä¹å¦ä½éåºä»£ç åï¼éè¿å¼å¸¸ãgoto ææµè¾¾å ¶ç»å°¾ï¼ã
示ä¾
class C { std::string member; // 声æè¯´æç¬¦åºå 为 "std::string" // 声æç¬¦ 为 "member" } obj, *pObj(&obj); // 声æè¯´æç¬¦åºå 为 "class C { std::string member; }" // 声æç¬¦ "obj" å®ä¹ C ç±»åç对象 // 声æç¬¦ "*pObj(&obj)" 声æå¹¶åå§åæå C çæé  int a = 1, *p = nullptr, f(), (*pf)(double); // 声æè¯´æç¬¦åºå 为 int // 声æç¬¦ a=1 å®ä¹å¹¶åå§å int ç±»åçåé // 声æç¬¦ *p=NULL å®ä¹å¹¶åå§å int* ç±»åçåé // 声æç¬¦ (f)() 声æï¼ä½ä¸å®ä¹ï¼ä¸æ¥æ¶åæ°å¹¶è¿å int ç彿° // 声æç¬¦ (*pf)(double) å®ä¹æåæ¥æ¶ double å¹¶è¿å int ç彿°çæé  int (*(*foo)(double))[3] = nullptr; // decl-specifier-seq 为 int // 1. 声æç¬¦ "(*(*foo)(double))[3]" æ¯æ°ç»å£°æç¬¦ï¼ // æå£°æç±»åæ¯âint ç 3 å ç´ æ°ç» /åµå¥å£°æç¬¦/ â // 2. åµå¥å£°æç¬¦æ¯ "(*(*foo)(double))"ï¼å®æ¯æé声æç¬¦ // æå£°æç±»åæ¯âint ç 3 å ç´ æ°ç» çæé /åµå¥å£°æç¬¦/â // 3. åµå¥å£°æç¬¦æ¯ "(*foo)(double)"ï¼å®æ¯å½æ°å£°æç¬¦ // æå£°æç±»åæ¯â以 int ç 3 å ç´ æ°ç» çæé 为è¿åå¼çæ¥åä¸ä¸ª double åæ°ç彿° /åµå¥å£°æç¬¦/â // 4. åµå¥å£°æç¬¦æ¯ "(*foo)"ï¼å®æ¯ï¼å¸¦æ¬å·ï¼å¦å½æ°å£°æç¬¦è¯æ³æè¦æ±çï¼æé声æç¬¦ã // æå£°æç±»åæ¯â以 int ç 3 å ç´ æ°ç» çæé 为è¿åå¼çæ¥åä¸ä¸ª double åæ°ç彿° çæé /åµå¥å£°æç¬¦/â // 5. åµå¥å£°æç¬¦æ¯ "foo"ï¼å®æ¯æ è¯ç¬¦ã // 该声æå£°æäºå¯¹è±¡ fooï¼å ¶ç±»å为â以 int ç 3 å ç´ æ°ç» çæé 为è¿åå¼çæ¥åä¸ä¸ª double åæ°ç彿° çæéâ // åå§åå¨ "= nullptr" æä¾æ¤æéçåå¼ã