æŠèŠ
C++26ãšã¯ã2026幎äžã«æ¹èšãããäºå®ã®ãC++ããŒãžã§ã³ã®éç§°ã§ããã
ãã®ããŒãžã§ã³ã¯ãçå®äžã®ããC++2cãšåŒã°ããããšããããã(2020幎代ã®3ã€ç®ã®ããŒãžã§ã³ã) 202c幎ã«ãªãªãŒã¹ãããããšããäŒãåãšããŠãcãã䜿ãããŠãããã3å¹Žåšæã«æ¬¡ã®ããŒãžã§ã³ãçå®ãããããšã決ãŸã£ãŠãããããäŒãåã«ãªã£ãŠãã幎æ°ããããããšã¯ãªãã
èšèªæ©èœ
倿°
| èšèªæ©èœ | 説æ |
|---|---|
std::initializer_listã®é
åãéçèšæ¶åã«é
眮ãã |
std::vector v = {1, 2, 3};ã®ãããªåæåã§åæååãªã¹ããéçèšæ¶åã«é
眮ããããšã§ç¡é§ãªã³ããŒããªãã |
宣èšã®ã¿ã§äœ¿çšããªã倿°ã®ååãšããŠ_ããµããŒã |
倿°å_ã¯æé»ã§[[maybe_unused]]ãæå®ããã |
äžå®å
šåãžã®ãã€ã³ã¿ã«å¯Ÿããdeleteãäžé©æ Œãšãã |
æªå®çŸ©åäœãåŒãèµ·ããæäœãã³ã³ãã€ã«ãšã©ãŒãšãã |
| è¿åŽããã巊蟺å€ããæé»å€æãããäžæãªããžã§ã¯ããåç §ã«æçžãããããšãçŠæ¢ãã | 寿åœåãã®å€æ°ã«ãã£ãŠåŒãèµ·ãããããã°ã鲿¢ãã |
| èŠçŽ æ°äžæã®é åãéæäœåæåããèŠåãæç¢ºå | é
åèŠçŽ ã®éæäœåæåã§{}ãçç¥ãããå Žåã®ççŸããŠããèŠå®ãä¿®æ£ |
| æªåæå倿°ã®èªã¿åãããšã©ãŒæ§åäœãšãã | åæåãããŠããªãèªå倿°ã®èªã¿åãã®å®å šæ§ãèŠå®ãã |
| æ§é åæçžã§ããã¯ãå°å ¥ã§ããããã«ãã | ã¿ãã«ãåè§£ããéã«è€æ°ã®å€æ°ãããã¯ãšããŠå®£èšã§ããããã«ãããauto [a, ...xs] = f(); |
æåå
| èšèªæ©èœ | 説æ |
|---|---|
| æååãªãã©ã«ã®æåãšã³ã³ãŒãã£ã³ã°å€±æãäžé©æ Œãšãã | æååãªãã©ã«ã®ãšã³ã³ãŒãã£ã³ã°æã«æå衚çŸã倱ãããå Žåã«ã³ã³ãã€ã«ãšã©ãŒã«ãã |
| ã³ã³ãã€ã«æã«ã®ã¿äœ¿çšãããæååã®æ±ããæç¢ºå | static_assertã[[deprecated]]ãªã©ã§äœ¿çšãããã³ã³ãã€ã«æã®æååã«ã€ããŠãæåã³ãŒãã®æå®ãçŠæ¢ããå®è¡æãšã³ã³ãŒãã£ã³ã°ãè¡ãããªãããšãèŠå® |
åå²ã»ã«ãŒã
| èšèªæ©èœ | 説æ |
|---|---|
| æ¡ä»¶åŒã§ã®æ§é åæçžã®äœ¿çšãèš±å¯ | åŒå
šäœãboolå€ã«å€æã§ããå Žåã«æ¡ä»¶åŒã§æ§é åæçžã䜿çšã§ããããšãšãã |
| 空ã®ç¡éã«ãŒãã¯æªå®çŸ©åäœã§ã¯ãªããšèŠå® | 䞊è¡ããã°ã©ã ã®é²è¡ä¿èšŒãªã©ãèæ ®ããŠç©ºã®ç¡éã«ãŒããæªå®çŸ©åäœã§ã¯ãªããã®ãšãã |
颿°
| èšèªæ©èœ | 説æ |
|---|---|
| 颿°å®£èšãåé€ããçç±ãæå®ã§ããããã«ãã | f() = delete("reason"); |
| å¥çŽããã°ã©ãã³ã°ããµããŒããã | 颿°ã®äºåæ¡ä»¶ãäºåŸæ¡ä»¶ãäžå€æ¡ä»¶ãèšè¿°ã§ããããã«ãã |
ã¯ã©ã¹
| èšèªæ©èœ | 説æ |
|---|---|
| å ±çšäœã®ç¹æ®ã¡ã³ã颿°ã®ããªãã¢ã«å | éããªãã¢ã«ãªåãã¡ã³ãã«ãã€å ±çšäœã®ããã©ã«ãã³ã³ã¹ãã©ã¯ã¿ãšãã¹ãã©ã¯ã¿ãããªãã¢ã«ã«ããæªåæåã¹ãã¬ãŒãžãšããŠäœ¿çšå¯èœã«ãã |
| å ±çšäœã¡ã³ãã®çåæéèŠåã®èª¿æŽ | å
±çšäœã®å
é ã¡ã³ãã®çåæéãæé»ã«éå§ããèŠåãæ€åããŠstd::start_lifetime()ã«ããæç€ºçãªéå§ãžå€æŽããçåæéå€ã®èŠçŽ ãå«ãé
åã¡ã³ãã宿°åŒã§èš±å¯ãã |
| é 眮newã®è§£æŸåŠçãæç¢ºå | é
眮newã§ç¢ºä¿ããã¡ã¢ãªã®è§£æŸåŠçã®åãæ±ãã«é¢ããã«ãŒã«ãæç¢ºåãã |
屿§
| èšèªæ©èœ | 説æ |
|---|---|
| 屿§ã®ç¡èŠæ§ãèŠçŽã | æ§æãšããŠé©æ Œãªå±æ§ã®ã¿ãç¡èŠã§ããããã«ããããã§ãªã屿§ã®äœ¿çšãäžé©æ Œãšãã |
| æ§é åæçžãžã®å±æ§ãèš±å¯ | auto [a, b [[maybe_unused]], c] = f();ã®ããã«æ§é åæçžã®èŠçŽ ã«å¯ŸããŠå±æ§ãä»å ã§ããããã«ãã |
ãã³ãã¬ãŒã
| èšèªæ©èœ | 説æ |
|---|---|
| ãã©ã¡ãŒã¿ããã¯ãžã®ã€ã³ããã¯ã¹ã¢ã¯ã»ã¹ãèš±å¯ | å¯å€åŒæ°ãã³ãã¬ãŒãã®ãã©ã¡ãŒã¿ããã¯ã«æ·»åã¢ã¯ã»ã¹ã§ããããã«ãã |
| å¶çŽåŒå ã§ã®ç³ã¿èŸŒã¿åŒã®é åºä»ã | ç³ã¿èŸŒã¿åŒãå«ãå¶çŽã®å æé¢ä¿ãèªèã§ããããã«ãããªãŒããŒããŒãè§£æ±ºã®ææ§ããè§£æ¶ãã |
å¯å€åŒæ°ãã³ãã¬ãŒãã§friend宣èšãã§ããããã«ãã |
ã¯ã©ã¹ãã³ãã¬ãŒãã®å¯å€åŒæ°ãã³ãã¬ãŒãã§ãŸãšããŠfriend宣èšã§ããããã«ãã |
| ã³ã³ã»ãããšå€æ°ãã³ãã¬ãŒãããã³ãã¬ãŒãåŒæ°ãšããŠæž¡ããããã«ãã | ãã³ãã¬ãŒããã³ãã¬ãŒããã©ã¡ãŒã¿ãšããŠãã¯ã©ã¹ãã³ãã¬ãŒãããšã€ãªã¢ã¹ãã³ãã¬ãŒãã«å ããã³ã³ã»ãããšå€æ°ãã³ãã¬ãŒããæž¡ããããã«ãã |
| å¯å€åŒæ°ãã³ãã¬ãŒãã®åé åºã忀èšãã | å¯å€åŒæ°ãã³ãã¬ãŒãã®éšåç¹æ®åã®åé åºã«ãŒã«ã忀èšããŠãããäžè²«ããã«ãŒã«ã«ãã |
| ãã³ãã¬ãŒããã³ãã¬ãŒããã©ã¡ãŒã¿ã«å¯Ÿããã¯ã©ã¹ãã³ãã¬ãŒããã©ã¡ãŒã¿åŒæ°æšè« | ãã³ãã¬ãŒããã³ãã¬ãŒããã©ã¡ãŒã¿ããã¯ã©ã¹ãã³ãã¬ãŒãåŒæ°ãæšè«ã§ããããã«ã¯ã©ã¹ãã³ãã¬ãŒãã®ãã³ãã¬ãŒãåŒæ°æšè«ãæ¡åŒµãã |
| SFINAEãé©çšããããçŽæ¥æèããå®çŸ© | ãã³ãã¬ãŒãã®çœ®æå€±æããšã©ãŒã«ãªããªãç¯å²ããçŽæ¥æèããšããŠæ£åŒã«å®çŸ©ããããã©ã«ãåŒæ°ã»noexceptæå®ã»å¥çŽæå®åã®äžã§ã®çœ®æå€±æãã³ã³ãã€ã«ãšã©ãŒãšãªãããšãæç¢ºåãã |
宿°åŒ
| èšèªæ©èœ | 説æ |
|---|---|
| éçãªãã¬ã¯ã·ã§ã³ | ãªãã¬ã¯ã·ã§ã³æŒç®å^^ãšstd::meta::infoåã«ããã³ã³ãã€ã«æã«ããŸããŸãªæ
å ±ãååŸã§ãã |
ã³ã³ãã€ã«æã®ã¿ãã«ããªã¹ããå±éåŠçããtemplate foræ |
ã¿ãã«ã»æ§é äœã»Rangeã»ãã©ã¡ãŒã¿ããã¯ãªã©ã®åèŠçŽ ã«å¯ŸããŠã³ã³ãã€ã«æã«æãå±éããtemplate foræã远å |
宿°åŒã§ã®void*ãããã€ã³ã¿åãžã®ãã£ã¹ããèš±å¯ |
åæ¶å»ã®ããã«void*ãããã€ã³ã¿åãžã®ãã£ã¹ããèš±å¯ãã |
static_assertã®èšºæã¡ãã»ãŒãžã«ãŠãŒã¶ãŒãçæããæååã®æå®ãèš±å¯ |
constexprãªS.size()ãšS.data()ã¡ã³ã颿°ããã€ãªããžã§ã¯ããã³ã³ãã€ã«ææååãšããŠæå®ã§ããããã«ãã |
constexpré
眮new |
宿°åŒã®æèã§ã®é
眮newãèš±å¯ |
constexpræ§é åæçžã®èš±å¯ãšãconstexpråç
§ã®å¶éç·©å |
宿°åŒã«å¯Ÿããæ§é åæçžãèš±å¯ããé¢é£ããŠconstexpråç
§ã®å¶éãç·©åããŠèªå倿°ãåç
§ã§ããããã«ãã |
| 宿°è©äŸ¡ã§ã®äŸå€éåºãèš±å¯ | 宿°åŒã®æèã§ã®äŸå€ã®éåºãšææãèš±å¯ |
constexprä»®æ³ç¶æ¿ãèš±å¯ |
宿°åŒã®æèã§ã®ä»®æ³ç¶æ¿ãèš±å¯ |
| 宿°è©äŸ¡ã®éå§ã»çµäºã¿ã€ãã³ã°ãæç¢ºå | 宿°è©äŸ¡ãã©ã®ã¿ã€ãã³ã°ã§éå§ã»çµäºããããæç¢ºåããconstexprã³ã³ããã¹ãã®èŠåãæŽãã |
ããªããã»ããµ
| èšèªæ©èœ | 説æ |
|---|---|
ãã¡ã€ã«ãèªã¿èŸŒã#embedåœä»€ã远å |
ãã€ããªãã¡ã€ã«ãã€ã³ã¯ã«ãŒãããã¡ã«ããºã ã#includeãšã¡ãã£ãŠèªã¿åºããµã€ãºãªã©ã®æè»ãªæå®ãã§ãã |
| ããªããã»ããµä»æ§ã§ã®ãæªå®çŸ©åäœããäžé©æ Œ (蚺æäžèŠ) ã«å€æŽ | ããªããã»ããµãšã¬ããµãŒã®æèã§ã®ãæªå®çŸ©åäœãçšèªãäžé©æ Œ (蚺æäžèŠ) ã«å€æŽ |
#lineãã£ã¬ã¯ãã£ãã®å¶çŽãçŸå®ã®å®è£
ã«åãããŠç·©åãã |
#line 0ã#line 2147483648ã®ãããªè¡çªå·æå®ãäžé©æ ŒãšããŠããããæ¡ä»¶ä»ããµããŒããšããŠèš±å¯ãã |
ãœãŒã¹ã³ãŒã
| èšèªæ©èœ | 説æ |
|---|---|
| åºæ¬æåéåã«@ã$ã`ã远å | Cèšèªãšã®äºææ§ã®ããã«ãããã®æåãåºæ¬æåéåã«è¿œå |
ã¢ãžã¥ãŒã«
| èšèªæ©èœ | 説æ |
|---|---|
| ã¢ãžã¥ãŒã«å®£èšã§ã®ã¢ãžã¥ãŒã«åã®ãã¯ãå±éãçŠæ¢ãã | export module MACRO_NAME;ãçŠæ¢ |
main颿°ãã°ããŒãã«ã¢ãžã¥ãŒã«ã«å«ããããããã«ãã |
main颿°ã«extern "C++"ãæå®ã§ããããã«ããããšã§ååä»ãã¢ãžã¥ãŒã«ã«å«ããããããã«ãã |
ã¢ãžã¥ãŒã«å®£èšããåã§ã®#lineãã£ã¬ã¯ãã£ãã®äœ¿çšãèš±å¯ãã |
ã¢ãžã¥ãŒã«å®£èšããåã§ã®#lineãã£ã¬ã¯ãã£ãã®äœ¿çšãçŠæ¢ããŠããã®ã¯é床ãªå¶éã ã£ã |
æ©èœã®éæšå¥šå
| èšèªæ©èœ | 説æ |
|---|---|
| å è¡ããã«ã³ãã®ãªãçç¥èšå·ãéæšå¥šå | void f(int, ...);ã¯OKãvoid f(int...);ã¯éæšå¥š |
æ©èœã®åé€
| èšèªæ©èœ | 説æ |
|---|---|
| éæšå¥šã ã£ãçµã¿èŸŒã¿é åã®æ¯èŒãåé€ | C++20ã§éæšå¥šãšãªã£ãŠããé 忝èŒãåé€ |
| éæšå¥šãšãªã£ãŠããåæåã®ç®è¡å€æãåé€ | C++20ããéæšå¥šãšãªã£ãŠããåæå€ãžã®ç®è¡æŒç®ã§ç®è¡åã«æé»å€æããã仿§ãåé€ |
ã©ã€ãã©ãªæŽæ°ã®æŠèŠ
æ°ã©ã€ãã©ãª
- æååãšã³ã³ãŒãã£ã³ã°ãèå¥ããã©ã€ãã©ãªãšããŠã
<text_encoding>ã远å - èŠçŽ ã®ã¡ã¢ãªäœçœ®ãå®å®ããã·ãŒã±ã³ã¹ã³ã³ããã®ã©ã€ãã©ãªãšããŠ
<hive>ã远å - 䞊è¡åŠçã«ãããããŒã¿ã®åç
§ã»æŽæ°ãè¡ãRCU (Read Copy Update) ã®ã©ã€ãã©ãªãšããŠã
<rcu>ã远å - 䞊è¡åŠçã«ãããŠåç
§äžã®ããŒã¿ãæŽæ°ãããªãããä¿è·ãããã¶ãŒããã€ã³ã¿ã®ã©ã€ãã©ãªãšããŠã
<hazard_pointer>ã远å - ããŒã¿äžŠåã©ã€ãã©ãªãšããŠã
<simd>ã远å - ãããã°ãµããŒãã®ã©ã€ãã©ãªãšããŠ
<debugging>ã远å - ç·åœ¢ä»£æ°ã©ã€ãã©ãªãšããŠ
<linalg>ã远å - ã³ã³ãã€ã«æã«å®¹éãåºå®ããå¯å€é·é
åã¯ã©ã¹ã®ã©ã€ãã©ãªãšããŠ
<inplace_vector>ã远å - C23ã®äºæã©ã€ãã©ãªãšããŠããããæäœã©ã€ãã©ãª
<stdbit.h>ãšãæ€æ»ä»ãæŽæ°æŒç®ã©ã€ãã©ãª<stdckdint.h>ã远å ã<cstdâŠ>圢åŒã®ã©ã€ãã©ãªã¯è¿œå ãããªã
å šäœ
- æšæºã©ã€ãã©ãªã«ä»å ããããæ»ãå€ãç¡èŠããéã«èŠåãåºåãã
[[nodiscard]]屿§ãåé€
ã³ã³ãã
std::vector<bool>::referenceã®ãããã·æäœãšããŠãconst修食ä»ãã®ä»£å ¥ãšswap()ã¡ã³ã颿°ã远åstd::mdspanããéšåãã¥ãŒãåãåºãstd::submdspan()ã远åstd::submdspan()ã®ã¹ã©ã€ã¹æå®åãšããŠãåãåºãèŠçŽ æ°ãšã¹ãã©ã€ãå¹ ãæå®ããstd::extent_sliceãšãåãåºãå ã®åéåºéãšã¹ãã©ã€ãå¹ ãæå®ããstd::range_sliceã远åstd::mdspanã«ãã€ã³ããã¯ã¹ãæå®ããŠèŠçŽ ãåãåºãat()ã¡ã³ã颿°ã远åstd::mdspanã«å¯Ÿããstd::dextentsæå®ã®åé·ãã解決ããstd::dimsã远åstd::mdspanã®ã¬ã€ã¢ãŠããšããŠãstd::layout_left_paddedãšstd::layout_right_paddedã远å<mdspan>ã«ãèŠçŽ ã¢ã¯ã»ã¹ã«ã¢ã©ã€ã¡ã³ãä¿èšŒãäžããstd::aligned_accessorã远åstd::spanã«ãã€ã³ããã¯ã¹ã¢ã¯ã»ã¹ã®ããã®at()ã¡ã³ã颿°ã远å- 飿³ã³ã³ããã®ä»¥äžã®ã¡ã³ã颿°ã«ãäžæãªããžã§ã¯ããçæãããã³ã¹ããæããæ¡åŒµã远å
std::spanãšstd::mdspanã®æšè«è£å©ãæ¹åstd::views::concatã远åstd::views::cache_latestã远åstd::views::as_inputã远å ãããã¯ããã©ãŒãã³ã¹åäžã®ããã«ãRangeãå ¥åRangeãã€écommon_range(ã€ãã¬ãŒã¿ãšçªå µã®åãå¥ãã) ã«å€æãã- Rangeé¢ä¿ã®ãååŽå®æ°æéã§ã®èŠçŽ è¿œå ãè¡ãæ©èœã远å
- åviewã¯ã©ã¹ã«
reserve_hint()ã¡ã³ã颿°ã远å std::ranges::reserve_hint()颿°ã远åstd::ranges::approximately_sized_rangeã³ã³ã»ããã远å
- åviewã¯ã©ã¹ã«
- ã€ã³ããã¯ã¹åãçæãã
std::views::indicesã远å - é£ç¶ã€ãã¬ãŒã¿ã®ã³ã³ã»ãã
contiguous_iteratorã«ããã€ã³ã¿ã«å€æã§ããããšãèŠä»¶ãšããŠè¿œå std::initializer_listã¯ã©ã¹ã以äžã®ããã«å€æŽ- ç¬èªã«å®çŸ©ãããŠãã
std::begin()/std::end()ã®ãªãŒããŒããŒããåé€ (std::cbegin()ãstd::rend()ã®ãããªãªãŒããŒããŒãããªãã£ããããã»ããšã®äžæŽåããã£ã) - ã¡ã³ã颿°
data()ã远å - ã¡ã³ã颿°
empty()ã远å
- ç¬èªã«å®çŸ©ãããŠãã
std::valarrayã¯ã©ã¹ã以äžã®ããã«å€æŽ- ç¬èªã«å®çŸ©ãããŠãã
std::begin()/std::end()ã®ãªãŒããŒããŒããåé€ (std::cbegin()ãstd::rend()ã®ãããªãªãŒããŒããŒãããªãã£ããããã»ããšã®äžæŽåããã£ã) - ã¡ã³ãå
iterator/const_iteratorã远å - ã¡ã³ã颿°
begin()/end()ã远å
- ç¬èªã«å®çŸ©ãããŠãã
- ã€ãã¬ãŒã¿ã€ã³ã¿ãã§ãŒã¹ã®éã¡ã³ã颿°
std::begin()/std::end()/std::cbegin()/std::cend()/std::rbegin()/std::rend()/std::crbegin()/std::crend()/std::size()/std::ssize()/std::empty()/std::data()ã以äžã®ããã«å€æŽstd::initializer_liståã«å¯ŸãããªãŒããŒããŒããåé€ (å°çšã®ãªãŒããŒããŒããçšæããªããŠãæ±çšãªãŒããŒããŒãã䜿çšã§ããããã«ãªã£ã)- æ¡ä»¶ä»ã
noexceptæå®ã远å
- Rangeã€ã³ã¿ãã§ãŒã¹ã®éã¡ã³ã颿°
std::ranges::begin()/std::ranges::end()/std::ranges::cbegin()/std::ranges::cend()/std::ranges::rbegin()/std::ranges::rend()/std::ranges::crbegin()/std::ranges::crend()/std::ranges::size()/std::ranges::ssize()/std::ranges::empty()/std::ranges::data()ã以äžã®ããã«å€æŽstd::initializer_liståã«å¯ŸãããªãŒããŒããŒããåé€ (å°çšã®ãªãŒããŒããŒããçšæããªããŠãæ±çšãªãŒããŒããŒãã䜿çšã§ããããã«ãªã£ã)- æ¡ä»¶ä»ã
noexceptæå®ã远å
- 以äžã®ã³ã³ããã
constexprã«å¯Ÿå¿std::dequestd::forward_liststd::liststd::map(ãã ãnode_handle::key()ã䜿çšãããšæªå®çŸ©åäœ)std::multimap(ãã ãnode_handle::key()ã䜿çšãããšæªå®çŸ©åäœ)std::setstd::multisetstd::unordered_map(ããã·ã¥é¢æ°ã®ã«ã¹ã¿ã åãå¿ èŠ) (ãã ãnode_handle::key()ã䜿çšãããšæªå®çŸ©åäœ)std::unordered_multimap(ããã·ã¥é¢æ°ã®ã«ã¹ã¿ã åãå¿ èŠ) (ãã ãnode_handle::key()ã䜿çšãããšæªå®çŸ©åäœ)std::unordered_set(ããã·ã¥é¢æ°ã®ã«ã¹ã¿ã åãå¿ èŠ)std::unordered_multiset(ããã·ã¥é¢æ°ã®ã«ã¹ã¿ã åãå¿ èŠ)std::flat_mapstd::flat_multimapstd::flat_setstd::flat_multisetstd::queuestd::priority_queuestd::stack
ã¢ã«ãŽãªãºã
<algorithm>ãš<memory>ã®ã¢ã«ãŽãªãºã ã䞊åå®è¡ã«å¯Ÿå¿<algorithm>ã®ä»¥äžã®ã¢ã«ãŽãªãºã ãconstexprã«å¯Ÿå¿<memory>ã®ä»¥äžã®ã¢ã«ãŽãªãºã ãconstexprã«å¯Ÿå¿std::uninitialized_default_construct()/std::ranges::uninitialized_default_construct()std::uninitialized_default_construct_n()/std::ranges::uninitialized_default_construct_n()std::uninitialized_value_construct()/std::ranges::uninitialized_value_construct()std::uninitialized_value_construct_n()/std::ranges::uninitialized_value_construct_n()std::uninitialized_copy()/std::ranges::uninitialized_copy()std::uninitialized_copy_n()/std::ranges::uninitialized_copy_n()std::uninitialized_move()/std::ranges::uninitialized_move()std::uninitialized_move_n()/std::ranges::uninitialized_move_n()std::uninitialized_fill()/std::ranges::uninitialized_fill()std::uninitialized_fill_n()/std::ranges::uninitialized_fill_n()
- Rangeã¢ã«ãŽãªãºã ãå®å
šåãèŠæ±ããªãããã«ããããã
std::projectedã®å¶çŽãç·©å - 以äžã®ã¢ã«ãŽãªãºã ã«ãå€ãæ³¢ã«ãã³åæåã§æž¡ããããå¶çŽã远å
std::erase()std::find()ãšstd::ranges::find()std::ranges::find_last()std::count()ãšstd::ranges::count()std::search_n()ãšstd::ranges::search_n()std::replace()ãšstd::ranges::replace()std::replace_if()ãšstd::ranges::replace_if()std::ranges::replace_copy()std::replace_copy_if()ãšstd::ranges::replace_copy_if()std::fill()ãšstd::ranges::fill()std::fill_n()ãšstd::ranges::fill_n()std::remove()ãšstd::ranges::remove()std::remove_copy()ãšstd::ranges::remove_copy()std::lower_bound()ãšstd::ranges::lower_bound()std::upper_bound()ãšstd::ranges::upper_bound()std::equal_range()ãšstd::ranges::equal_range()std::binary_search()ãšstd::ranges::binary_search()std::ranges::fold_left()std::ranges::fold_right()std::ranges::contains()std::uninitialized_fill()ãšstd::ranges::uninitialized_fill()std::uninitialized_fill_n()ãšstd::ranges::uninitialized_fill_n()
颿°ãªããžã§ã¯ã
- æææš©ãä¿æããªã
std::functionãšããŠã<functional>ã«std::function_refã¯ã©ã¹ã远å std::move_only_functionã®ã³ããŒå¯èœçãšããŠã<functional>ã«std::copyable_functionã¯ã©ã¹ã远åstd::bind_front()ãšstd::bind_back()ã«ãéåãã³ãã¬ãŒãåŒæ°ãšããŠé¢æ°ãæå®ãããªãŒããŒããŒãã远å- é¢é£ããŠãéåãã³ãã¬ãŒãåŒæ°ã®é¢æ°ãªããžã§ã¯ããå転ãããããããã
not_fn()ã«éåãã³ãã¬ãŒãåŒæ°çã®ãªãŒããŒããŒãã远å
- é¢é£ããŠãéåãã³ãã¬ãŒãåŒæ°ã®é¢æ°ãªããžã§ã¯ããå転ãããããããã
std::reference_wrapperã«ãæ¯èŒæŒç®å==ãš<=>ã远å
æåå
<charconv>ã®å€æçµæstd::to_chars_resultãšstd::from_chars_resultã«ãå€æãæ£ããå®äºããããå€å®ããoperator boolã远åstd::to_string()ã®ä»æ§ãstd::sprintf()ã§èª¬æãããŠããããstd::format()ã§å®çŸ©ãããã仿§ã倿Žstd::basic_istringstreamããã³std::basic_ostringstreamã®ã³ã³ã¹ãã©ã¯ã¿ããã³str()ã¡ã³ã颿°ã«ãstd::basic_string_viewãåãåããªãŒããŒããŒãã远åstd::format()ã«ã以äžã®æ¹åãå°å ¥- ãã€ã³ã¿åºåã®ãµããŒãã远å
- å¹ ãšç²ŸåºŠãåçã«æå®ããå Žåã§ãåã®æ€èšŒãã³ã³ãã€ã«æã«è¡ããããã仿§ãèŠçŽã
- ã³ã³ãã€ã«æã®æžåŒæååã ãã§ãªããå®è¡æã®æžåŒæååãæž¡ãããã仿§ä¿®æ£
- éãã±ãŒã«çã
constexprã«å¯Ÿå¿
std::to_string()ãšstd::to_wstring()ã®æŽæ°ãªãŒããŒããŒããconstexprã«å¯Ÿå¿std::basic_stringã¯ã©ã¹ãšstd::basic_string_viewã¯ã©ã¹ã«ãéšåæååãstd::basic_string_viewãšããŠååŸããã¡ã³ã颿°subview()ã远åstd::basic_stringãšstd::basic_string_viewãstd::basic_stringãšããŠé£çµãããoperator+ã远å
ãã¡ã€ã«
- ãã¡ã€ã«ã®ãã€ãã£ããã³ãã«ãååŸã§ããããã
std::basic_filebufãstd::basic_ifstreamãstd::basic_ofstreamãstd::basic_fstreamã¯ã©ã¹ã«ã以äžã®ã¡ã³ãã远ånative_handle_typeånative_handle()
std::filesystem::pathã¯ã©ã¹ã«ãæååãã©ãŒãããã®ãµããŒãã远åstd::filesystem::pathã¯ã©ã¹ã«ãåºåçšã®æååãååŸããããã®ã以äžã®ã¡ã³ã颿°ã远å
å ¥åºå
std::print()ãšstd::println()ã«ãããã¯ãååŸããé«éã«æžãåºãæé©åãèš±å¯std::println()ã«ãæ¹è¡ã®ã¿ãåºåãããªãŒããŒããŒãã远åstd::print()ãšstd::println()ãããé«éã«ã§ããæé©åãå¯èœãå€å®ããstd::enable_nonlocking_formatter_optimizationã远åstd::basic_istream::ignore()ã¡ã³ã颿°ã«ãåºåãæåãšããŠcharåããšããªãŒããŒããŒãã远å
䞊è¡ã»äžŠåã»éåæåŠç
<execution>ã«æ±çšçãªéåæå®è¡ã管çãããã¬ãŒã ã¯ãŒã¯ã远åstd::atomicãªããžã§ã¯ãã«å¯Ÿãã2ã€ã®å€ã®æå€§å€ã»æå°å€ãååŸãã颿°ãšããŠã以äžã远å- ã¡ã³ã颿°
fetch_max()fetch_min()fetch_fmaximum()(æµ®åå°æ°ç¹æ°çš)fetch_fminimum()(æµ®åå°æ°ç¹æ°çš)fetch_fmaximum_num()(æµ®åå°æ°ç¹æ°çš)fetch_fminimum_num()(æµ®åå°æ°ç¹æ°çš)
- éã¡ã³ã颿°ãšããŠ
- ã¡ã³ã颿°
std::atomicã¯ã©ã¹ãšstd::atomic_refã¯ã©ã¹ã«ãçŸåšã®å€ãèªã¿èŸŒãŸã (fetchãã) ã«å ç®ãªã©ãããé«éãªçž®çŽçšã®æäœãšããŠã以äžã远å- ã¡ã³ã颿°
store_add()store_sub()store_and()store_or()store_xor()store_max()store_min()store_fmaximum()(æµ®åå°æ°ç¹æ°çš)store_fminimum()(æµ®åå°æ°ç¹æ°çš)store_fmaximum_num()(æµ®åå°æ°ç¹æ°çš)store_fminimum_num()(æµ®åå°æ°ç¹æ°çš)
- éã¡ã³ã颿°
std::atomic_store_add()std::atomic_store_add_explicit()std::atomic_store_sub()std::atomic_store_sub_explicit()std::atomic_store_and()std::atomic_store_and_explicit()std::atomic_store_or()std::atomic_store_or_explicit()std::atomic_store_xor()std::atomic_store_xor_explicit()std::atomic_store_max()std::atomic_store_max_explicit()std::atomic_store_min()std::atomic_store_min_explicit()
- ã¡ã³ã颿°
std::atomic_refã¯ã©ã¹ã«ãåç §ãããªããžã§ã¯ãã®ã¢ãã¬ã¹ãååŸããaddress()ã¡ã³ã颿°ã远åstd::atomicã¯ã©ã¹ã®ãã³ãã¬ãŒããã©ã¡ãŒã¿ãšããŠCV修食ãããåãçŠæ¢std::atomic_refã¯ã©ã¹ã®ãã³ãã¬ãŒããã©ã¡ãŒã¿ãšããŠãCV修食ãããåãåãåããããã«ãã (å éšã§CV修食ãå€ããã)<atomic>ã©ã€ãã©ãªã®ã¢ãããã¯æäœãconstexpr察å¿
ã¹ããŒããã€ã³ã¿ã»ã¡ã¢ãªé¢é£
- åç確ä¿ãããªããžã§ã¯ãã«å€ã®æå³è«ãããããŠãã£ãŒãã³ããŒããããŠãŒãã£ãªãã£ã¯ã©ã¹ãšããŠã
<memory>ã«std::indirectã¯ã©ã¹ãšstd::polymorphicã¯ã©ã¹ã远å std::weak_ptrãéé åºé£æ³ã³ã³ããã®ããŒãšããŠäœ¿çšã§ããããã<memory>ã«æææš©ããŒã¹ã®ããã·ã¥å€ãååŸãã颿°ãªããžã§ã¯ãstd::owner_hashãããã³æææš©ããŒã¹ã®ç倿¯èŒãè¡ã颿°ãªããžã§ã¯ãstd::owner_equalã远å- é¢é£ããŠã
std::shared_ptrã¯ã©ã¹ãšstd::weak_ptrã¯ã©ã¹ã®ã¡ã³ã颿°ãšããŠãowner_hash()ãšowner_equal()ã远å
- é¢é£ããŠã
std::shared_ptrã¯ã©ã¹ãšãã®é¢é£æ©èœãconstexpr察å¿
æ¥ä»ã»æé
<chrono>ã®ä»¥äžã®ã¯ã©ã¹ã«ãããã·ã¥å€ãµããŒããšããŠstd::hashã®ç¹æ®åã远åstd::chrono::durationstd::chrono::time_pointstd::chrono::daystd::chrono::monthstd::chrono::yearstd::chrono::weekdaystd::chrono::weekday_indexedstd::chrono::weekday_laststd::chrono::month_daystd::chrono::month_day_laststd::chrono::month_weekdaystd::chrono::month_weekday_laststd::chrono::year_monthstd::chrono::year_month_daystd::chrono::year_month_day_laststd::chrono::year_month_weekdaystd::chrono::year_month_weekday_laststd::chrono::zoned_timestd::chrono::leap_second
æ°å€
<cmath>ã«ãæµ®åå°æ°ç¹æ°ã®æå€§å€ã»æå°å€ãæ±ãã以äžã®é¢æ°ã远åstd::fmaximum()(-0.0ãš+0.0ã§ã¯+0.0ãè¿ããNaNãšæ°å€ã§ã¯NaNãè¿ã)std::fmaximum_num()(-0.0ãš+0.0ã§ã¯+0.0ãè¿ããNaNãšæ°å€ã§ã¯æ°å€ãè¿ã)std::fminimum()(-0.0ãš+0.0ã§ã¯-0.0ãè¿ããNaNãšæ°å€ã§ã¯NaNãè¿ã)std::fminimum_num()(-0.0ãš+0.0ã§ã¯-0.0ãè¿ããNaNãšæ°å€ã§ã¯æ°å€ãè¿ã)
<numeric>ã«ãé£œåæŒç® (Saturation Arithmetic) ãšããŠãåã®è¡šçŸå¯èœãªç¯å²ã§æŒç®ãè¡ã以äžã®é¢æ°ã远åstd::complexãæ§é åæçžããå°æ¥ã®ãã¿ãŒã³ãããã§äœ¿çšã§ããããã¿ãã«ã€ã³ã¿ãã§ãŒã¹ã®ç¹æ®åã远å<random>ã®ç¯å²[0, 1)ã®ä¹±æ°ãçæããstd::generate_canonical()ããæãŸããçµ±èšçæ§è³ªãä¿èšŒããããã¢ã«ãŽãªãºã ãšå¶çŽã倿Ž<random>ã«ãä¹±æ°åãçæããstd::ranges::generate_random()颿°ã远å<random>ã«ãä¹±æ°çæåšã¯äžŠåã·ãã¥ã¬ãŒã·ã§ã³ã«å¹æçãªã«ãŠã³ã¿ãŒããŒã¹ã®Philoxä¹±æ°çæåšãšããŠãstd::philox_engineã¯ã©ã¹ãããã³ãã®å¥åã§ããstd::philox4x32ãšstd::philox4x64ã远å<random>ã®ä¹±æ°çæåšã«signed charãšunsigned charã®ãµããŒãã远å<cmath>ã®ä»¥äžã®é¢æ°ããconstexprã«å¯Ÿå¿ (ç¹æ®é¢æ°ãšãã°ããŒãã«ã®äžžãã¢ãŒãã«äŸåããäžžã颿°ä»¥å€ã®å šãŠ)std::cos()std::sin()std::tan()std::cosh()std::sinh()std::tanh()std::acos()std::asin()std::atan()std::atan2()std::acosh()std::asinh()std::atanh()std::exp()std::exp2()std::expm1()std::log()std::log10()std::log1p()std::log2()std::pow()std::sqrt()std::cbrt()std::hypot()std::erf()std::erfc()std::lgamma()std::tgamma()
<complex>ã®ä»¥äžã®é¢æ°ããconstexprã«å¯Ÿå¿ (ãã¹ãŠ)std::abs()std::arg()std::proj()std::polar()std::cos()std::sin()std::tan()std::cosh()std::sinh()std::tanh()std::acos()std::asin()std::atan()std::acosh()std::asinh()std::atanh()std::exp()std::log()std::log10()std::pow()std::sqrt()std::norm()(ç®è¡åãªãŒããŒããŒã)std::conj()(ç®è¡åãªãŒããŒããŒã)std::imag()(ç®è¡åãªãŒããŒããŒã)std::real()(ç®è¡åãªãŒããŒããŒã)
ãŠãŒãã£ãªãã£
std::variantã¯ã©ã¹ã«ãã¡ã³ã颿°çã®visit()ã远åstd::monostateãšãã®æ¯èŒæŒç®åãhashç¹æ®åãã<variant>ãããã«å ããŠ<utility>ãããã§ã䜿çšã§ããããã«ããstd::optionalã¯ã©ã¹ã«ã0ãããã¯1èŠçŽ ã®RangeãšããŠæ±ããããã«ããããã®æ¡åŒµãšããŠãã€ãã¬ãŒã¿ã€ã³ã¿ãã§ãŒã¹ã远åstd::optionalã«ãåç §ãä¿æããããã®T&ã®éšåç¹æ®åã远åstd::applyã®æ»ãå€åæšè«ããããŠãæ»ãå€åçšã®std::apply_resultã¯ã©ã¹ã远å ããé¢é£ãã以äžã®æ©èœã远åstd::is_applicableåç¹æ§std::is_nothrow_applicableåç¹æ§
std::ignoreããã¡ãŒã¹ãã¯ã©ã¹ã»ãªããžã§ã¯ããšããŠåã詳现ã«å®çŸ©std::bitsetã«ãstd::basic_string_viewãåãåãã³ã³ã¹ãã©ã¯ã¿ã远å<ratio>ã«ãæ°ããªSIæ¥é èŸãšããŠã以äžã远å- 宿°åŒã§ã®äŸå€éåºãèš±å¯ãããããšã«ãšããªãã以äžã
constexprå<exception>ãããã®ä»¥äžã®æ©èœstd::exceptionã¯ã©ã¹ã®å šã¡ã³ã颿°std::bad_exceptionã¯ã©ã¹ã®what()ã¡ã³ã颿°std::rethrow_exception()颿°std::make_exception_ptr()颿°
<new>ãããã®ä»¥äžã®æ©èœstd::bad_allocã¯ã©ã¹ã®what()ã¡ã³ã颿°std::bad_array_new_lengthã¯ã©ã¹ã®what()ã¡ã³ã颿°
<typeinfo>ãããã®ä»¥äžã®æ©èœstd::bad_castã¯ã©ã¹ã®what()ã¡ã³ã颿°std::bad_typeidã¯ã©ã¹ã®what()ã¡ã³ã颿°
<stdexcept>ãããã®ä»¥äžã®æ©èœ<expected>ãããã®ä»¥äžã®æ©èœ<optional>ãããã®ä»¥äžã®æ©èœ<variant>ãããã®ä»¥äžã®æ©èœ<format>ãããã®ä»¥äžã®æ©èœ
<memory>ã«ããã€ã³ã¿ã®ã¢ã©ã€ã¡ã³ããå€å®ããstd::is_sufficiently_aligned()颿°ã远å ã<utility>ã«ãã¿ã€ã ãã©ãã«æé©åãææ¢ããããã®èŠ³æž¬å¯èœãã€ã³ããšããŠstd::observable_checkpoint()ã远åstd::exception_ptrãæå®ããäŸå€åã«ãã£ã¹ãããstd::exception_ptr_cast()颿°ã远å<compare>ã«ãåã®é åºãååŸããstd::type_orderã¯ã©ã¹ã远å<utility>ã«ã宿°ãåãšããŠå ãããšã§ã颿°ã®åŒæ°ãšããŠæž¡ããŠã宿°åŒãšããŠæ±ããããã«ãã宿°ã©ãããŒstd::constant_wrapperã¯ã©ã¹ãšããããç°¡æœã«çæãã倿°ãã³ãã¬ãŒãstd::cwã远å
ãããã°
assertãã¯ãã®åŒæ°ãšããŠã«ã³ããå«ãåŒãæå®ã§ãããããå¯å€åŒæ°å
åç¹æ§
<type_traits>ã«ãå ±çšäœã®æå®ãããã¡ã³ããã¢ã¯ãã£ããã宿°åŒã§å€å®ããããã®é¢æ°ãšããŠstd::is_within_lifetime()ã远å<type_traits>ã«ãä»®æ³ç¶æ¿ã®é¢ä¿ãå€å®ããstd::is_virtual_base_ofã远åstd::integer_sequenceã¯ã©ã¹ãæ§é åæçžãštemplate foræã§äœ¿çšã§ããããã«ãããããã¿ãã«ã€ã³ã¿ãã§ãŒã¹ã®ç¹æ®åã远å
å¶çŽ
- 鿥å®è¡ã«é¢é£ããå¶çŽãããå ±éåç §ã®èŠä»¶ãåé€
æ©èœã®éæšå¥šå
<type_traits>ã®std::is_trivialãéæšå¥šå- ããã¯
std::is_trivially_copyableãšstd::is_trivially_default_constructibleã®2ã€ãåããã£ããã®ã§ãããããããã¯ç°ãªãç¶æ³ã§å¿ èŠã«ãªããã®ã§ãã£ã
- ããã¯
std::memory_order::consumeãšãããã«é¢é£ããŠstd::kill_dependency()ãéæšå¥šåãã[[carries_dependency]]屿§ãåé€std::filesystem::pathã¯ã©ã¹ã®ã以äžã®éãã³ãã¬ãŒãçã¡ã³ã颿°ãéæšå¥šåstring()generic_string()- ãããã¯OSäŸåã®ãã¹åãšã³ã³ãŒãã£ã³ã°ãžå€æãããããiostreamã»
std::format()ã»std::print()ãå«ãã»ãŒãã¹ãŠã®æšæºã®ããã¹ãåŠçã»å ¥åºåæ©èœãšäºææ§ããªããæååããããŒã¿æå€±ã®åå ã«ãªãããã - ã¬ã¬ã·ãŒãªã·ã¹ãã APIã«ãã¹ãæž¡ãçšéã§ã¯ããã€ãã£ããšã³ã³ãŒãã£ã³ã°ãžã®å€æã§ããããšãæç¢ºã«ãã
native_encoded_string()ã»generic_native_encoded_string()ã䜿çšãã - 衚瀺ã»ãã©ãŒãããã®çšéã§ã¯ã
display_string()ã»generic_display_string()ããããã¯std::format()ã»std::print()ã䜿çšãã
éæšå¥šã®åãæ¶ã
std::polymorphic_allocator::destroy()ã®éæšå¥šãåãæ¶ã
æ©èœã®åé€
- C++98ããéæšå¥šãšãªã£ãŠãã
<strstream>ã©ã€ãã©ãªãåé€ - C++17ããéæšå¥šãšãªã£ãŠããUnicode倿ã©ã€ãã©ãª
<codecvt>ãšãstd::wstring_convertã¯ã©ã¹ãstd::wbuffer_convertã¯ã©ã¹ãåé€ - C++20ããéæšå¥šãšãªã£ãŠããã
std::basic_string::reserve()ã®ãã©ã¡ãŒã¿ãªãã®ãªãŒããŒããŒããåé€ - C++20ããéæšå¥šãšãªã£ãŠãã
std::shared_ptrã«å¯Ÿããã以äžã®å€ãã¢ãããã¯æäœé¢æ°ã®ãªãŒããŒããŒããåé€std::atomic_is_lock_freestd::atomic_loadstd::atomic_load_explicitstd::atomic_storestd::atomic_store_explicitstd::atomic_exchangestd::atomic_exchange_explicitstd::atomic_compare_exchange_weakstd::atomic_compare_exchange_strongstd::atomic_compare_exchange_weak_explicitstd::atomic_compare_exchange_strong_explicit
- C++23ããéæšå¥šãšãªã£ãŠããã
std::allocatorã®ã¡ã³ãåis_always_equalãåé€
åãæ±ºã
- Cèšèªã®åç
§ãC17ããC23ã«æŽæ°ãããã«ãšããªããCã©ã€ãã©ãªç±æ¥ã®ãããã«ä»¥äžã®å€æŽãå
¥ã£ã
<cstdlib>:free_sized()ã»free_aligned_sized()ã»memalignment()ã»strfromf()ã»strfromd()ã»strfroml()ã远å ãbsearch()ã«constçãªãŒããŒããŒãã远å ãrealloc()ã«ãµã€ãº0ãæž¡ããå Žåããšã©ãŒæ§åäœãšãªã£ã<ctime>:timespec_getres()ã»timegm()ã»gmtime_r()ã»localtime_r()ãšãTIME_MONOTONICã»TIME_ACTIVEã»TIME_THREAD_ACTIVEã»__STDC_VERSION_TIME_H__ã远å ãasctime()ã»ctime()ãéæšå¥šå<cmath>:nextup()ã»nextdown()ã远å<cstdio>:_PRINTF_NAN_LEN_MAXã»__STDC_VERSION_STDIO_H__ã远å<cinttypes>: 2鲿°çšã®æžåŒæå®ãã¯ã (PRIbNã»SCNbNç) ãš__STDC_VERSION_INTTYPES_H__ã远å<cfloat>:INFINITYã»NANã»FLT_SNANã»DBL_SNANã»LDBL_SNANã»__STDC_VERSION_FLOAT_H__ã远å ãDECIMAL_DIGãéæšå¥šåããFLT_HAS_SUBNORMã»DBL_HAS_SUBNORMã»LDBL_HAS_SUBNORMã廿¢äºå® (obsolescent) ãšãã<climits>: åæŽæ°åã®å¹ (ãããæ°) ã衚ãBOOL_WIDTHçã®ãã¯ãã远å<cstdint>: åæŽæ°åã®å¹ (ãããæ°) ã衚ãINT8_WIDTHçã®ãã¯ããšã__STDC_VERSION_STDINT_H__ã远å<cstring>:memccpy()ã»strdup()ã»strndup()ã»memset_explicit()ã远å<cuchar>:mbrtoc8()ã»c8rtomb()ã»__STDC_VERSION_UCHAR_H__ã远å<cstddef>:unreachableãã¯ãããã³__STDC_VERSION_STDDEF_H__ã¯å®çŸ©ããªãããšãæèš