C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- C++ å ·åè¦æ±ï¼ 彿°å¯¹è±¡ (FunctionObject)
- C++ å ·åè¦æ±ï¼ äºå è°è¯ (BinaryPredicate)
- C++ å ·åè¦æ±ï¼ å¯é»è®¤æé (DefaultConstructible)
- C++ å ·åè¦æ±ï¼ å¯å¤å¶èµå¼ (CopyAssignable)
- C++ å ·åè¦æ±ï¼ å¯å¤å¶æé (CopyConstructible)
- C++ å ·åè¦æ±ï¼ å¯ç§»å¨èµå¼ (MoveAssignable) (C++11 èµ·)
- C++ å ·åè¦æ±ï¼ å¯ç§»å¨æé (MoveConstructible) (C++11 èµ·)
- C++ å ·åè¦æ±ï¼ 坿æ (Destructible)
- C++ å ·åè¦æ±ï¼ å¯å¹³å¡å¤å¶ (TriviallyCopyable)
- C++ å ·åè¦æ±ï¼ å¯ç¸çæ¯è¾ (EqualityComparable)
- C++ å ·åè¦æ±ï¼ å¯å°äºæ¯è¾ (LessThanComparable)
- C++ å ·åè¦æ±ï¼ æ¯è¾ (Compare)
- C++ å ·åè¦æ±ï¼ åé¢ç±»å (LiteralType)
- C++ å ·åè¦æ±ï¼ ç®æ§æ°æ®ç±»å (PODType)
- C++ å ·åè¦æ±ï¼ å¹³å¡ç±»å (TrivialType)
- C++ å ·åè¦æ±ï¼ æ åå¸å±ç±»å (StandardLayoutType)
- C++ å ·åè¦æ±ï¼ éçååè¿ä»£å¨ (LegacyForwardIterator)
- C++ å ·åè¦æ±ï¼ å¯äº¤æ¢ (Swappable)
- C++ å ·åè¦æ±ï¼ å¼å¯äº¤æ¢ (ValueSwappable)
- C++ å ·åè¦æ±ï¼ å¯ç©ºæé (NullablePointer) (C++11 èµ·)
- C++ å ·åè¦æ±ï¼ æ£å (Hash)
- C++ å ·åè¦æ±ï¼ åé å¨ (Allocator)
- C++ å ·åè¦æ±ï¼ å¯è°ç¨ (Callable)
- C++ å ·åè¦æ±ï¼ è°è¯ (Predicate)
- C++ å ·åè¦æ±ï¼ å®¹å¨ (Container)
- C++ å ·åè¦æ±ï¼ åºåå®¹å¨ (SequenceContainer)
- C++ å ·åè¦æ±ï¼ è¿ç»å®¹å¨ (ContiguousContainer)
- C++ å ·åè¦æ±ï¼ å¯éå®¹å¨ (ReversibleContainer)
- C++ å ·åè¦æ±ï¼ å ³èå®¹å¨ (AssociativeContainer)
- C++ å ·åè¦æ±ï¼ å ·åé å¨å®¹å¨ (AllocatorAwareContainer)
- C++ å ·åè¦æ±ï¼ æ åºå ³èå®¹å¨ (UnorderedAssociativeContainer)
- C++ å ·åè¦æ±ï¼ å¯é»è®¤æå ¥ (DefaultInsertable)
- C++ å ·åè¦æ±ï¼ å¯å¤å¶æå ¥ (CopyInsertable)
- C++ å ·åè¦æ±ï¼ å¯ç§»å¨æå ¥ (MoveInsertable) (C++11 èµ·)
- C++ å ·åè¦æ±ï¼ å¯å°±ä½æé (EmplaceConstructible) (C++11 èµ·)
- C++ å ·åè¦æ±ï¼ 坿¦é¤ (Erasable)
- C++ å ·åè¦æ±ï¼ éçè¿ä»£å¨ (LegacyIterator)
- C++ å ·åè¦æ±ï¼ éçè¾åºè¿ä»£å¨ (LegacyOutputIterator)
- C++ å ·åè¦æ±ï¼ éçè¾å ¥è¿ä»£å¨ (LegacyInputIterator)
- C++ å ·åè¦æ±ï¼ éçååè¿ä»£å¨ (LegacyBidirectionalIterator)
- C++ å ·åè¦æ±ï¼ éçéæºè®¿é®è¿ä»£å¨ (LegacyRandomAccessIterator)
- C++ å ·åè¦æ±ï¼ éçè¿ç»è¿ä»£å¨ (LegacyContiguousIterator)
- C++ å ·åè¦æ±ï¼ 常é表达å¼è¿ä»£å¨ (ConstexprIterator)
- C++ å ·åè¦æ±ï¼ ææ ¼å¼è¾å ¥å½æ° (FormattedInputFunction)
- C++ å ·åè¦æ±ï¼ æ æ ¼å¼è¾å ¥å½æ° (UnformattedInputFunction)
- C++ å ·åè¦æ±ï¼ ææ ¼å¼è¾åºå½æ° (FormattedOutputFunction)
- C++ å ·åè¦æ±ï¼ æ æ ¼å¼è¾åºå½æ° (UnformattedOutputFunction)
- C++ å ·åè¦æ±ï¼ ç§ååºå (SeedSequence)
- C++ å ·åè¦æ±ï¼ éæºæ°å¼æ (RandomNumberEngine)
- C++ å ·åè¦æ±ï¼ éæºæ°åå¸ (RandomNumberDistribution)
- C++ å ·åè¦æ±ï¼ ååéæºä½çæå¨ (UniformRandomBitGenerator)
- C++ å ·åè¦æ±ï¼ éæºæ°å¼æéé å¨ (RandomNumberEngineAdaptor)
- C++ å ·åè¦æ±ï¼ åºæ¬å¯éå® (BasicLockable)
- C++ å ·åè¦æ±ï¼ å¯éå® (Lockable)
- C++ å ·åè¦æ±ï¼ å¯å®æ¶éå® (TimedLockable)
- C++ å ·åè¦æ±ï¼ äºæ¥ä½ (Mutex)
- C++ å ·åè¦æ±ï¼ 宿¶äºæ¥ä½ (TimedMutex)
- C++ å ·åè¦æ±ï¼ å ±äº«äºæ¥ä½ (SharedMutex)
- C++ å ·åè¦æ±ï¼ å ±äº«å®æ¶äºæ¥ä½ (SharedTimedMutex)
- C++ å ·åè¦æ±ï¼ å符ç¹å¾ (CharTraits)
- C++ å ·åè¦æ±ï¼ æ£å表达å¼ç¹å¾ (RegexTraits)
- C++ å ·åè¦æ±ï¼ 使©ç ç±»å (BitmaskType)
- C++ å ·åè¦æ±ï¼ æ°å¼ç±»å (NumericType)
- C++ å ·åè¦æ±ï¼ ä¸å ç±»åç¹å¾ (UnaryTypeTrait)
- C++ å ·åè¦æ±ï¼ äºå ç±»åç¹å¾ (BinaryTypeTrait)
- C++ å ·åè¦æ±ï¼ 忢ç¹å¾ (TransformationTrait)
- C++ å ·åè¦æ±ï¼ æ¶é (Clock)
- C++ å ·åè¦æ±ï¼ 平塿¶é (TrivialClock)
- 注é
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >å ·åè¦æ± > C++ å ·åè¦æ±ï¼ åé¢ç±»å (LiteralType)
C++ å ·åè¦æ±ï¼ åé¢ç±»å (LiteralType)
ææä¸ä¸ªç±»å为åé¢ç±»åãåé¢ç±»åæ¯ constexpr åéææ¥æçç±»åï¼ä¸è½éè¿ constexpr 彿°æé ãæä½åè¿åå®ä»¬ã
注æï¼æ åä¸å¹¶æ²¡æå®ä¹å ·æè¿ä¸ªååçå ·åè¦æ±ãè¿æ¯æ ¸å¿è¯è¨æå®ä¹çä¸ç§ç±»åç±»å«ãå°å®ä½ä¸ºå ·åè¦æ±å å«äºæ¤åªæ¯ä¸ºäºä¿æä¸è´æ§ã
è¦æ±
åé¢ç±»åæ¯æ¯ä¸åä¹ä¸ï¼
|
(C++14 èµ·) |
- æ éç±»åï¼
- å¼ç¨ç±»åï¼
- åé¢ç±»åçæ°ç»ï¼
- 坿 cv éå®ç类类åï¼å¹¶æ¥æä¸åå ¨é¨å±æ§ï¼
- æ¥æå¹³å¡ (C++20 å) constexpr (C++20 èµ·)ææå½æ°ï¼
- æ¯ä»¥ä¸ä¹ä¸
- èåç±»åï¼
- ææ¥æè³å°ä¸ä¸ª constexpr æé 彿°ï¼å¯ä¸ºæ¨¡æ¿ï¼ä¸éå¤å¶æç§»å¨æé 彿°ï¼
|
(C++17 èµ·) |
|
(C++17 èµ·) |
|
(C++17 å) |
åæ°
æ©å±å符串åé¢éçåé¢ç±»åï¼
è¿è¡æ¤ä»£ç
#include <iostream> #include <stdexcept>  class conststr { const char* p; std::size_t sz; public: template<std::size_t N> constexpr conststr(const char(&a)[N]) : p(a), sz(N - 1) {}  constexpr char operator[](std::size_t n) const { return n < sz ? p[n] : throw std::out_of_range(""); } constexpr std::size_t size() const { return sz; } };  constexpr std::size_t countlower(conststr s, std::size_t n = 0, std::size_t c = 0) { return n == s.size() ? c : s[n] >= 'a' && s[n] <= 'z' ? countlower(s, n + 1, c + 1) : countlower(s, n + 1, c); }  // è¦æ±ç¼è¯æ¶å¸¸éçè¾åºå½æ°ï¼ä¸ºæµè¯ç¨ template<int n> struct constN { constN() { std::cout << n << '\n'; } };  int main() { std::cout << "the number of lowercase letters in \"Hello, world!\" is "; constN<countlower("Hello, world!")>(); // éå¼è½¬æ¢æ conststr }
è¾åºï¼
the number of lowercase letters in "Hello, world!" is 9
ç¼ºé·æ¥å
ä¸åæ´æ¹è¡ä¸ºçç¼ºé·æ¥å追溯å°åºç¨äºä»¥ååºçç C++ æ åã
| DR | åºç¨äº | åºçæ¶çè¡ä¸º | æ£ç¡®è¡ä¸º |
|---|---|---|---|
| CWG 1951 | C++11 (类类å) C++14 (void) |
ä»ä¸æç¡® cv éå®ç void åç±»ç±»åæ¯å¦åé¢ç±»å
|
å®ä»¬æ¯ |
åé
| (C++11)(C++17 ä¸å¼ç¨)(C++20 ä¸ç§»é¤) |
æ£æ¥ç±»åæ¯å¦ä¸ºåé¢ç±»å (类模æ¿) |