ΠΠΎΠΌΠΈΡΠ΅ΡΡΡ ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΅Π·ΠΈΠΊΠ° C++ Π½Π° ISO ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π΅Π½ ΡΡΠ°Π½Π΄Π°ΡΡ ββ. ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈΡΠ΅ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄Π΅Π½ΠΈΡΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ, Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈΡΠ΅ , ΠΈ . ΠΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ C++20 ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° .
Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π΄Π²Π° ΠΌΠ΅ΡΠ΅ΡΠ° ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π°ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ Π² ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ°Π²ΠΎΠΏΠΈΡΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΡΠΈΠΏΠΎΠ³ΡΠ°ΡΡΠΊΠΈ Π½Π΅ΡΠΎΡΠ½ΠΎΡΡΠΈ. Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΈΡΡ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½ Π² ISO Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°Π»Π½ΠΎΡΠΎ ΠΈΠΌΠ΅ ISO/IEC 14882:2020. ΠΠ΅ΠΆΠ΄ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΠΊΠΎΠΌΠΈΡΠ΅ΡΡΡ Π²Π΅ΡΠ΅ Π΅ Π·Π°ΠΏΠΎΡΠ½Π°Π» ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ C++23 (C++2b) ΠΈ Π½Π° ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠΎΡΠΎ Π²ΠΈΡΡΡΠ°Π»Π½ΠΎ Π·Π°ΡΠ΅Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈΡΠ΅ .
():
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° βΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈβ, ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Ρ Π½Π°Π±ΠΎΡΠ° ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ°Ρ ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°. ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΈΠ·Π±ΡΠ³Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° Π²Ρ
ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ.
template
concept EqualityComparable = requires(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - ΠΠΊΠ»ΡΡΠ΅Π½ΠΈ ΡΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²ΠΌΠ΅ΡΡΠΎ Π·Π°Π³Π»Π°Π²Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π½ΠΎΠ² Π½Π°ΡΠΈΠ½ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΡΠ΅ΠΊΡΡ Π½Π° base Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅, Π±Π΅Π· Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°Π³Π»Π°Π²Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΡΠ΅Π· β#includeβ.
- ΠΠ°ΠΊΡΠΎΡ __VA_OPT__ Π·Π° Π°Π΄Π°ΠΏΡΠΈΠ²Π½ΠΎ ΡΠ°Π·ΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° Π²Π°ΡΠΈΠ°ΡΠΈΠ²Π½ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠΊΠ΅Π½ΠΈ Π² Π²Π°ΡΠΈΠ°ΡΠΈΠ²Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ββ Π·Π° ΡΡΠΎΠΉΠ½ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° Π±ΠΈΡΠΎΠ²ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π»Π°ΠΏΠ΄Π°-Π·Π°Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° ΠΈΠ·ΡΠ°Π·ΠΈ β*thisβ.
struct int_value {
int n = 0;
auto getter_fn() {
// BAD:
// return [=]() { return n; };// GOOD:
return [=, *this]() { return n; };
}
}; - ΠΠΎΡΡΡΠΏ Π΄ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΏΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π» (Pointer-to-member), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΡΠ΅Π· βconst &β.
- ΠΠΏΠ΅ΡΠ°ΡΠΎΡ delete Ρ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ, ΠΎΠΏΠΈΡΠ°Π½ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° .
- ΠΠ° ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅ ΠΈΠΌ Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° Π±Π΅Π· ΡΠΈΠΏ.
struct foo {
foo() = default;
constexpr foo(int) {}
};template
auto get_foo() {
return f;
}get_foo(); // uses implicit constructor
get_foo(); - ΠΠ΅ Π·Π°ΠΏΠ°Π·Π²Π°ΡΠΈ Π»ΡΠΌΠ±Π΄Π°-ΠΈΠ·ΡΠ°Π·ΠΈ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ.
- ΠΠΎΠΏΡΡΡΠΈΠΌΠΎΡΡ Π½Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅ Π·Π° Π»ΡΠΌΠ±Π΄Π°-ΠΈΠ·ΡΠ°Π·ΠΈ ("auto f = [<typename T>(std::vector<T> v)").
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡΡΠΈΠ½Π³ΠΎΠ²ΠΈ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΈ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΎΠ½Π΅Π½ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π² ΡΡΠΈΠ» C β ΡΠ²Π½ΠΎ Π½Π΅ ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈ Π² ΡΠΏΠΈΡΡΠΊΠ°, ΠΏΠΎΠ»Π΅ΡΠ° ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
struct A {
int x;
int y;
int z = 123;
};A a {.x = 1, .z = 2}; // a.x == 1, a.y == 0, a.z == 2
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠ°Π·Π½ΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΡΡΡΡΠΊΡΡΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅ likely ΠΈ unlikely Π·Π° ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠ° ΠΎΡΠ½ΠΎΡΠ½ΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΡΠ»ΠΎΠ²Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ("[[likely]] if (random > 0) {").
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² ΡΠΈΠΊΡΠ»Π° "for"
for (auto v = std::vector{1, 2, 3}; auto& e : v) {
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ²Π° Π² new ("new double[]{1,2,3}");
- ΠΡΡΠΈΠ±ΡΡ "[[no_unique_address]]", ΠΏΡΠΈ ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π±Π΅Π· Π΄Π°Π½Π½ΠΈ Π½Π΅ Π·Π°Π΅ΠΌΠ°Ρ ΠΌΡΡΡΠΎ.
- ΠΡΠΎΠΌΠ°ΡΠ½ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ (std::atomic<shared_ptr<T>> ΠΈ std::atomic<weak_ptr<T>>).
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠ»ΠΎΠ²Π½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π±ΡΡΠ·ΠΈ (immediate) ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ ΡΠ°ΠΌΠΎ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ.
consteval int sqr(int n) {
return n * n;
}constexpr int r = sqr(100); // OK
int x = 100;
int r2 = sqr(x); // ΠΠ ΠΠ¨ΠΠ: 'x' Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° - ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° constexpr Ρ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ("constexpr virtual int f() const { return 2; }").
- Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°:
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠΈΠΏΠ° char8_t Π·Π° UTF-8 ΡΡΡΠΈΠ½Π³ΠΎΠ²Π΅.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π·Π°Π³Π»Π°Π²Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ bit (Π±ΠΈΡΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ) ΠΈ version.
- ΠΠΎΡΠ²ΠΈΠ»Π° ΡΠ΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠ΅ΡΠΈΠΊΡΠΈ ΠΈ ΡΡΡΠΈΠΊΡΠΈ Π½Π° ΡΡΡΠΈΠ½Π³ΠΎΠ²Π΅ (starts_with, ends_with).
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° ΡΠΈΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ΠΈ std::type_identity.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated ΠΈ std::assume_aligned.
- Π std::make_shared Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΌΠ°ΡΠΈΠ²ΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΡΡΠ½ΠΊΡΠΈΡ std::to_array Π·Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ²ΠΈ, Π² std::array.
- ΠΠΎ-ΡΠ΄ΠΎΠ±Π΅Π½ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π° ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈΡ:
enum class rgba_color_channel { red, green, blue, alpha };
std::string_view to_string(rgba_color_channel my_channel) {
switch (my_channel) {
using enum rgba_color_channel;
case red: return "red";
case green: return "green";
case blue: return "blue";
case alpha: return "alpha";
}
} - Π ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π΅ Π·Π°Π±ΡΠ°Π½Π΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° β,β (βa[b,c]β) ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠΠΎΠ΄ΠΊΡΠ΅ΠΏΠ°ΡΠ° Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΎΠ±ΡΠ²Π΅Π½ΠΈ Ρ ΠΊΠ»ΡΡΠΎΠ²Π°ΡΠ° Π΄ΡΠΌΠ° volatile, Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½Π°, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π°Π±ΡΠ°Π½Π΅Π½ΠΈ ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ β++β ΠΈ βββ ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅.
- ΠΠ°ΠΌΠ°Π»Π΅Π½ΠΈ ΡΠ° ΡΠ»ΡΡΠ°ΠΈΡΠ΅, Π² ΠΊΠΎΠΈΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ βtypenameβ, Π·Π° Π΄Π° ΡΠ²Π΅Π΄ΠΎΠΌΠΈΡΠ΅ Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠΈΠΏ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
