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++ è¯è¨ > æ¯è¾è¿ç®ç¬¦
æ¯è¾è¿ç®ç¬¦
æ¯è¾åæ°ã
| è¿ç®ç¬¦å | è¯æ³ | å¯éè½½ | åå示ä¾ï¼å¯¹ class Tï¼ | |
|---|---|---|---|---|
| ä½ä¸ºæå彿° | ä½ä¸ºèªç±ï¼å½å空é´ï¼å½æ° | |||
| çäº | a == b
|
æ¯ | bool T::operator ==(const T2 &b) const; | bool operator ==(const T &a, const T2 &b); |
| ä¸çäº | a != b
|
æ¯ | bool T::operator !=(const T2 &b) const; | bool operator !=(const T &a, const T2 &b); |
| å°äº | a < b
|
æ¯ | bool T::operator <(const T2 &b) const; | bool operator <(const T &a, const T2 &b); |
| å¤§äº | a > b
|
æ¯ | bool T::operator >(const T2 &b) const; | bool operator >(const T &a, const T2 &b); |
| å°äºæçäº | a <= b
|
æ¯ | bool T::operator <=(const T2 &b) const; | bool operator <=(const T &a, const T2 &b); |
| å¤§äºæçäº | a >= b
|
æ¯ | bool T::operator >=(const T2 &b) const; | bool operator >=(const T &a, const T2 &b); |
| ä¸è·¯æ¯è¾(C++20) | a <=> b
|
æ¯ | /*è§è¯´æ*/ T::operator <=>(const T2 &b) const; | /*è§è¯´æ*/ operator <=>(const T &a, const T2 &b); |
| ||||
åè·¯æ¯è¾
åè·¯æ¯è¾è¿ç®ç¬¦è¡¨è¾¾å¼çå½¢å¼ä¸º
lhs < rhs
|
(1) | ||||||||
lhs > rhs
|
(2) | ||||||||
lhs <= rhs
|
(3) | ||||||||
lhs >= rhs
|
(4) | ||||||||
lhs == rhs
|
(5) | ||||||||
lhs != rhs
|
(6) | ||||||||
trueï¼å¦åè¿å falseãtrueï¼å¦åè¿å falseãtrueï¼å¦åè¿å falseãtrueï¼å¦åè¿å falseãtrueï¼å¦åè¿å falseãtrueï¼å¦åè¿å falseãæææ åµä¸ï¼å¯¹äºå 建è¿ç®ç¬¦ï¼lhs å rhs å¨åºç¨å·¦å¼å°å³å¼ãæ°ç»å°æéå彿°å°æéæ å转æ¢åï¼å¿ é¡»å ·æä¸åç±»åä¹ä¸
- ç®æ¯ææä¸¾ç±»åï¼è§ä¸æçç®æ¯æ¯è¾è¿ç®ç¬¦ï¼
- æéç±»åï¼è§ä¸æçæéæ¯è¾è¿ç®ç¬¦ï¼
è¥ä¸¤ä¸ªè¿ç®æ°å¨åºç¨è¿äºè½¬æ¢ååå ·ææ°ç»ç±»åï¼åè¿ç§æ¯è¾è¢«å¼ç¨ã (C++20 èµ·)
任使
åµä¸ï¼ç»æå为 bool 纯å³å¼ã
ç®æ¯æ¯è¾è¿ç®ç¬¦
å¦æä¸¤ä¸ªæä½æ°å ·æç®æ¯æï¼æä½ç¨åææ ä½ç¨åï¼æä¸¾ç±»åï¼åéµå¾ªç®æ¯è¿ç®ç¬¦çè§åï¼å¯¹ä¸¤ä¸ªæä½æ°å®æ½ä¸è¬ç®æ¯è½¬æ¢ã转æ¢ä¹åè¿è¡å¼çæ¯è¾ï¼
示ä¾
#include <iostream> int main() { std::cout << std::boolalpha; int n = -1; Â int n2 = 1; std::cout << " -1 == 1? " << (n == n2) << '\n' << "Comparing two signed values:\n" << " -1 < 1? " << (n < n2) << '\n' << " -1 > 1? " << (n > n2) << '\n'; Â unsigned int u = 1; std::cout << "Comparing signed and unsigned:\n" << " -1 < 1? " << (n < u) << '\n' << " -1 > 1? " << (n > u) << '\n'; Â unsigned char uc = 1; std::cout << "Comparing signed and smaller unsigned:\n" << " -1 < 1? " << (n < uc) << '\n' << " -1 > 1? " << (n > uc) << '\n'; }
è¾åºï¼
-1 == 1? false Comparing two signed values: -1 < 1? true -1 > 1? false Comparing signed and unsigned: -1 < 1? false -1 > 1? true Comparing signed and smaller unsigned: -1 < 1? true -1 > 1? false
æéæ¯è¾è¿ç®ç¬¦
æ¯è¾è¿ç®ç¬¦å¯ç¨äºæ¯è¾äºä¸ªæéï¼ææåæéï¼ä½ä» å¯¹äº operator== å operator!=ï¼ï¼æä¸ä¸ªï¼æåï¼ (C++14 èµ·)æéåä¸ä¸ªç©ºæé常éï¼æä¸¤ä¸ªç©ºæé常éï¼ä½è¦è³å°ä¸ä¸ªä¸º std::nullptr_tï¼NULL å NULL çæ¯è¾éµå¾ªç®æ¯æ¯è¾è§åï¼ (C++14 å)ã
é¦å ï¼å¯¹ä¸¤ä¸ªæä½æ°åºç¨æé转æ¢ï¼è¥åæ°ä¸ºæåæéå为æåæé转æ¢ï¼ã彿°æéè½¬æ¢ (C++17 èµ·)åé宿§è½¬æ¢ï¼ä»¥è·å¾åææéç±»åï¼è§åå¦ä¸
Tï¼æå cv2 T çæéï¼å
¶ä¸ T ä¸ºå¯¹è±¡ç±»åæ voidï¼ååæç±»å为âæå cv12 void çæéâï¼å
¶ä¸ cv12 为 cv1 ä¸ cv2 çåå¹¶|
4) è¥ä¸¤ä¸ªæä½æ°å为æå带æä¸å cv éå®çåä¸ç±»åçæéï¼ååæç±»å为æååä¸ç±»åçæé并带æä¸¤ä¸ªå®å cv é宿§çåå¹¶ cv é宿§ã
|
(C++14 å) |
|
4) è¥æä½æ°çç±»ååå«ä¸ºæåï¼å¯è½ cv éå®ï¼T1 çæé P1ï¼åæåï¼å¯è½ cv éå®ï¼T2 çæé P2ï¼ä¸è¥ T1 ä¸ T2 ç¸åææ¯ T2 çåºç±»ï¼ååææéç±»å为 P1 ä¸ P2 ç cv ç»åç±»åãå¦åï¼è¥ T2 为 T1 çåºç±»ï¼ååææéç±»å为 P2 ä¸ P1 ç cv ç»åç±»åã
5) è¥æä½æ°çç±»ååå«ä¸ºæåï¼å¯è½ cv éå®ï¼U1 ç±»åç T1 çæåæéï¼åæåï¼å¯è½ cv éå®ï¼U2 ç±»åç T2 çæåæéï¼ä¸è¥ T1 ä¸ T2 ç¸åææ´¾çäº T2ï¼ååææéç±»å为 MP1 å MP2 ç cv ç»åç±»åãå¦åï¼è¥ T2 æ´¾çäº T1ï¼ååææéç±»å为 MP2 ä¸ MP1 ç cv ç»åç±»åã
6) è¥æä½æ° P1 å P2 çç±»åå
·æç¸å屿°çå¤å±æ··åæéåæåæéç±»åï¼èä»
å¨ä»»ä½å±ä¸ç cv é宿§æå«ï¼ååææéç±»å为 P1 ä¸ P2 ç cv ç»åç±»å
ä¸é¢çå®ä¹ä¸ï¼ä¸¤ä¸ªæéç±»å P1 å P2 ç cv ç»åç±»åï¼æ¯æ¥æç¸åç屿°ä¸æ¯å±å ·æä¸ P1 ç¸åç±»åçç±»å P3ï¼å ¶ä¸æ¯å±ä¸ç cv é宿§è®¾å®å¦ä¸ï¼ a) é¤é¡¶å±ä¹å¤çæ¯å±ï¼å
¶ cv é宿§ä¸ºè¯¥å±ä¸ P1 ä¸ P2 ç cv é宿§çåå¹¶
b) 妿æä»»ä½å±ä¸å¾å°ç cv é宿§ä¸åä¸å±ä¸ P1 æ P2 ç cv é宿§ä¸åï¼å对顶å±åæ¤å±ä¹é´çæ¯ä¸å±æ·»å constã
ä¾å¦ï¼void* ä¸ const int* çåææéç±»å为 const void*ãint** ä¸ const int** çåææéç±»å为 const int* const*ãæ³¨æï¼C++14 ä¹åæ æ³æ¯è¾ int** å const int**ã |
(C++14 èµ·) |
|
é¤ä¸è¿°ä¹å¤ï¼å½æ°æéåæå noexcept 彿°çæéï¼åªè¦å½æ°ç±»åç¸åï¼çåææéç±»åä¸ºå½æ°æéã |
(C++17 èµ·) |
注æè¿æå³ç任使éé½è½ä¸ void* è¿è¡æ¯è¾ã
两个对象æéï¼è½¬æ¢åï¼çæ¯è¾ç»æå®ä¹å¦ä¸ï¼
&obj+1 æ¯è¾å¤§äº &objã (C++17 èµ·)两个ï¼è½¬æ¢åï¼æéçç¸çæ§æ¯è¾çç»æå®ä¹å¦ä¸ï¼
两个ï¼è½¬æ¢åï¼æåæéçæ¯è¾ç»æå®ä¹å¦ä¸ï¼
è¥æé p æ¯è¾çäºæé qï¼å p<=q å p>=q é½äº§åº true è p<q å p>q é½äº§åº falseã
è¥æé p æ¯è¾å¤§äºæé qï¼å p>=qãp>qãq<=p å q<p é½äº§åº true è p<=qãp<qãq>=p å q>p é½äº§åº falseã
è¥æªææä¸¤ä¸ªæéçæ¯è¾å¤§äºææ¯è¾ç¸çï¼åå ¶æ¯è¾ç»ææªææãå ¶ç»æå¯ä»¥æ¯ä¸ç¡®å®çï¼å¹¶ä¸çè³ä¸å¿ å¨ç¨åºçå䏿¬¡æ§è¡ä¸ï¼å¨æ¥æç¸åæä½æ°çç¸å表达å¼ç夿¬¡æ±å¼ä¹é´ä¿æä¸è´ï¼
int x, y;  bool f(int* p, int* q) { return p < q; }  assert(f(&x, &y) == f(&x, &y)); // å¨éµä»æ åçå®ç°ä¸å¯è½å¼åæè¨
å¨éå¯¹ç¨æ·å®ä¹è¿ç®ç¬¦çéè½½å³è®®ä¸ï¼å¯¹äºï¼å æ¬æä¸¾ç±»åçï¼æ¯ä¸ªæååç®æ¯ç±»å L å Rï¼ä¸å彿°ç¾ååä¸éè½½å³è®®ï¼
| bool operator<(L, R); |
||
| bool operator>(L, R); |
||
| bool operator<=(L, R); |
||
| bool operator>=(L, R); |
||
| bool operator==(L, R); |
||
| bool operator!=(L, R); |
||
å¯¹äºæ¯ä¸ªå¯¹è±¡æéæå½æ°æéæ std::nullptr_t (C++14 å)çç±»å Pï¼ä¸å彿°ç¾ååä¸éè½½å³è®®ï¼
| bool operator<(P, P); |
||
| bool operator>(P, P); |
||
| bool operator<=(P, P); |
||
| bool operator>=(P, P); |
||
| bool operator==(P, P); |
||
| bool operator!=(P, P); |
||
å¯¹äºæ¯ä¸ªä¸ºæå对象æéææå彿°æéæ std::nullptr_t çç±»å MPï¼ä¸å彿°ç¾ååä¸éè½½å³è®®ï¼
| bool operator==(MP, MP); |
||
| bool operator!=(MP, MP); |
||
示ä¾
#include <iostream> struct Foo { int n1; int n2; }; union Union { int n; double d; }; int main() { std::cout << std::boolalpha; Â char a[4] = "abc"; Â char* p1 = &a[1]; char* p2 = &a[2]; std::cout << "Pointers to array elements: p1 == p2 " << (p1 == p2) << ", p1 < p2 " << (p1 < p2) << '\n'; Â Foo f; int* p3 = &f.n1; int* p4 = &f.n2; std::cout << "Pointers to members of a class: p3 == p4 " << (p3 == p4) << ", p3 < p4 " << (p3 < p4) << '\n'; Â Union u; int* p5 = &u.n; double* p6 = &u.d; std::cout << "Pointers to members of a union: p5 == (void*)p6 " << (p5 == (void*)p6) << ", p5 < p6 " << (p5 < (void*)p6) << '\n'; }
è¾åºï¼
Pointers to array elements: p1 == p2 false, p1 < p2 true Pointers to members of a class: p3 == p4 false, p3 < p4 true Pointers to members of a union: p5 == (void*)p6 true, p5 < p6 false
注解
å 为è¿äºè¿ç®ç¬¦ä»å·¦å°å³ç»åï¼æ è¡¨è¾¾å¼ a<b<c 被åæä¸º (a<b)<cï¼èé a<(b<c) æ (a<b)&&(b<c)ã
å¯¹ç¨æ·å®ä¹ç operator< çä¸é¡¹å¸¸è§è¦æ±æ¯ä¸¥æ ¼å¼±åºãå°¤å ¶æ¯ï¼ç¨æ¯è¾ (Compare) ç±»åè¿è¡å·¥ä½çæ åç®æ³å容å¨å¦ std::sortãstd::max_elementãstd::map çé½å¯¹æ¤ææè¦æ±ã
å°½ç®¡æªææå¯¹éæºæ¥æºï¼ä¾å¦ä¸é½æåå䏿°ç»ä¸çæåï¼çæéæ¯è¾çç»æï¼è®¸å¤å®ç°é½æä¾æéçä¸¥æ ¼å ¨åºï¼ä¾å¦è¥å®ä»¬è¢«å®ç°ä¸ºè¿ç»çèæå°å空é´ä¸çå°åãä¸è¿æ ·åçå®ç°ï¼ä¾å¦å¹¶éæéçææä½é½æ¯å åå°åçä¸é¨åè卿¯è¾ä¸å¿ 须被忽ç¥ï¼æè¦æ±è¿è¡é¢å¤ç计ç®å¦åæé䏿´æ°å¹¶é 1 对 1 å ³ç³»ï¼ï¼è¦ä¸ºæéæä¾å ·æè¿é¡¹ä¿è¯ç std::less çç¹åãè¿ä½¿å¾ç¨åºå¯ä»¥å°éæºæ¥æºçæææéé½ç¨ä½æ åå ³è容å¨ï¼å¦ std::set æ std::mapï¼çé®ã
å¯¹äºæ¢å¯ç¸çæ¯è¾ (EqualityComparable) åå¯å°äºæ¯è¾ (LessThanComparable) çç±»åï¼C++ æ ååºå¨ç¸çï¼å³è¡¨è¾¾å¼ a == b çå¼ï¼ï¼åçä»·ï¼å³è¡¨è¾¾å¼ !(a < b) && !(b < a) çå¼ï¼ä¹é´ååºåºå«ã
C++14 ä¸ç§»é¤äºæéä¸ç©ºæé常éé´çæ¯è¾ã
void f(char * p) { if (p > 0) { ... } // C++98..C++11 ä¸ OKï¼C++14 ä¸ä¸è½ç¼è¯ if (p > nullptr) { ... } // C++11 ä¸ OKï¼C++14 ä¸ä¸è½ç¼è¯ }
ä¸è·¯æ¯è¾ä¸è·¯æ¯è¾è¿ç®ç¬¦è¡¨è¾¾å¼çå½¢å¼ä¸º
表达å¼è¿åä¸ä¸ªå¯¹è±¡ï¼ä½¿å¾
妿æä½æ°ä¹ä¸ä¸º bool ç±»åèå¦ä¸ä¸ªä¸æ¯ï¼ç¨åºéè¯æã è¥ä¸¤ä¸ªæä½æ°åå ·æç®æ¯ç±»åï¼æè¥ä¸ä¸ªå ·ææ ä½ç¨åæä¸¾ç±»åèå¦ä¸ä¸ªå ·ææ´åç±»åï¼å对åæä½æ°åºç¨ä¸è¬ç®æ¯è½¬æ¢ï¼ç¶å
è¥ä¸¤ä¸ªæä½æ°é½å ·æç¸åçæä¸¾ç±»å Eï¼åè¿ç®ç¬¦äº§åºå°åæä½æ°è½¬æ¢ä¸º E çåºå±ç±»åå对转æ¢åçæä½æ°åºç¨ <=> çç»æã è¥è³å°ä¸ä¸ªæä½æ°ä¸ºæéææåæéï¼åæéåºç¨æ°ç»å°æé转æ¢ãæ´¾çç±»å°åºç±»æé转æ¢ã彿°æé转æ¢åé宿§è½¬æ¢ï¼ä»¥å°å®ä»¬è½¬æ¢ä¸ºå䏿éç±»åï¼ä¸ç»ææéç±»å为对象æéç±»åï¼å p <=> q è¿å std::strong_ordering ç±»åç纯å³å¼ï¼
å¦åç¨åºéè¯æã å¨éå¯¹ç¨æ·å®ä¹è¿ç®ç¬¦çéè½½å³è®®ä¸ï¼å¯¹äºæéææä¸¾ç±»å
å ¶ä¸ R æ¯ä¸ææå®ä¹çæåºç±»å«ç±»åã æ³¨è§£ç±»ç±»åå¯ä»¥èªå¨çæä¸è·¯æ¯è¾ï¼è§é»è®¤æ¯è¾ã å¦æä¸¤ä¸ªè¿ç®æ°å为æ°ç»ï¼åé¤äºæ¯è¾æ°ç»ç±»åçç±»æåä¹å¤ï¼ä¸è·¯æ¯è¾å为éè¯æã unsigned int i = 1; auto r = -1 < i; // æ¢åé·é±ï¼è¿å false auto r2 = -1 <=> i; // é误ï¼è¦æ±çªå转æ¢
|
(C++20 èµ·) | |||||||||||||||||||||||||||||
æ ååº
æ¯è¾è¿ç®ç¬¦ä¸ºæ ååºä¸ç许å¤ç±»æéè½½ã
| (C++20 ä¸ç§»é¤) |
æ£æ¥å¯¹è±¡æ¯å¦æä»£ç¸åç±»å ( std::type_info çå
¬å¼æå彿°) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æ¯è¾ä¸¤ä¸ª error_code (彿°) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æ¯è¾ error_condition å error_code (彿°) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æåå
¸åºæ¯è¾ pair ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æåå
¸é¡ºåºæ¯è¾ tuple ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾å
¶å
容 ( std::bitset<N> çå
¬å¼æå彿°) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ä¸¤ä¸ªåé
å¨å®ä¾ ( std::allocator<T> çå
¬å¼æå彿°) |
| (C++20 ä¸ç§»é¤)(C++20) |
ä¸å¦ä¸ä¸ª unique_ptr æ nullptr è¿è¡æ¯è¾ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
ä¸å¦ä¸ä¸ª shared_ptr æ nullptr è¿è¡æ¯è¾ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ std::function å nullptr (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æ¯è¾ä¸¤ä¸ªæ¶é¿ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æ¯è¾ä¸¤ä¸ªæ¶é´ç¹ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ä¸¤ä¸ª scoped_allocator_adaptor å®ä¾ ( std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...> çå
¬å¼æå彿°) |
| (C++20 ä¸ç§»é¤)(C++20) |
æ¯è¾åºå± std::type_info 对象 ( std::type_index çå
¬å¼æå彿°) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
以åå
¸åºæ¯è¾ä¸¤ä¸ªå符串 (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
locale 对象ä¹é´çç¸çæ§æ¯è¾ ( std::locale çå
¬å¼æå彿°) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ array ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ deque ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ forward_list ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ list ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ vector ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ map ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ multimap ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ set ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ multiset ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ unordered_map ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ unordered_multimap ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ unordered_set ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ unordered_multiset ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ queue ä¸çå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æç
§åå
¸é¡ºåºæ¯è¾ stack ä¸çå¼ (彿°æ¨¡æ¿) |
| æ¯è¾åºå±è¿ä»£å¨ (彿°æ¨¡æ¿) | |
| (C++20 ä¸ç§»é¤)(C++20) |
æ¯è¾åºå±è¿ä»£å¨ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ä¸¤ä¸ª istream_iterator (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ä¸¤ä¸ª istreambuf_iterator (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ä¸¤ä¸ªå¤æ°ï¼æä¸ä¸ªå¤æ°ä¸ä¸ä¸ªæ é (彿°æ¨¡æ¿) |
| æ¯è¾ä¸¤ä¸ª valarraysï¼ææ¯è¾ä¸ä¸ª valarray åä¸ä¸ªå¼ (彿°æ¨¡æ¿) | |
| æ¯è¾ä¸¤ä¸ªä¼ªéæºæ°å¼æçå
é¨ç¶æ (彿°) | |
| æ¯è¾ä¸¤ä¸ªåå¸å¯¹è±¡ (彿°) | |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æ¯è¾ä¸ä¸ª sub_match ä¸å¦ä¸ sub_match ãå符串æå符 (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
以åå
¸åºæ¯è¾ä¸¤ä¸ªå¹é
ç»æçå¼ (彿°æ¨¡æ¿) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ä¸¤ä¸ª regex_iterator ( std::regex_iterator<BidirIt,CharT,Traits> çå
¬å¼æå彿°) |
| (C++20 ä¸ç§»é¤) |
æ¯è¾ä¸¤ä¸ª regex_token_iterator ( std::regex_token_iterator<BidirIt,CharT,Traits> çå
¬å¼æå彿°) |
| (C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20 ä¸ç§»é¤)(C++20) |
æ¯è¾ä¸¤ä¸ª thread::id 对象 (彿°) |
å½åç©ºé´ rel_ops æä¾äºæ³åè¿ç®ç¬¦ !=ã>ã<= å >=
| å®ä¹äºå¤´æä»¶
<utility> | |
| å®ä¹äºå½å空é´
std::rel_ops | |
| (C++20 ä¸å¼ç¨) |
èªå¨çæåºäºç¨æ·å®ä¹ç operator== å operator< çæ¯è¾è¿ç®ç¬¦ (彿°æ¨¡æ¿) |
åé
| 常è§è¿ç®ç¬¦ | ||||||
|---|---|---|---|---|---|---|
| èµå¼ | èªå¢ èªå |
ç®æ¯ | é»è¾ | æ¯è¾ | æåè®¿é® | å ¶ä» |
|
a = b |
++a |
+a |
!a |
a == b |
a[b] |
a(...) |
| ç¹æ®è¿ç®ç¬¦ | ||||||
|
static_cast 转æ¢ä¸ä¸ªç±»å为å¦ä¸ç¸å
³ç±»å | ||||||