ΠΠΎΠΌΠΈΡΠ΅Ρ Π½Π° ISO ΠΏΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΅Π·ΠΈΠΊΠ° C++
ΠΡΠ΅Π· ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π΄Π²Π° ΠΌΠ΅ΡΠ΅ΡΠ° ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π°ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π° Π΅ΡΠ°ΠΏ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅, ΠΊΠ°ΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΠΎΠ½Π½Π° ΠΊΠΎΡΠ΅ΠΊΡΠΈΡ Π½Π° ΠΏΡΠ°Π²ΠΎΠΏΠΈΡΠ½ΠΈ ΠΈ ΠΏΠ΅ΡΠ°ΡΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ. Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½ Π½Π° ISO Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ ΠΏΠΎΠ΄ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎΡΠΎ ΠΈΠΌΠ΅ ISO/IEC 14882:2020. ΠΠ΅ΠΆΠ΄ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠΌΠΈΡΠΈΡΡΠ° Π²Π΅ΡΠ΅ Π΅ Π·Π°ΠΏΠΎΡΠ½Π°Π»Π° ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ C++23 (C++2b) ΠΈ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠΈ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ ΡΠΈ Π²ΠΈΡΡΡΠ°Π»Π½ΠΎ Π·Π°ΡΠ΅Π΄Π°Π½ΠΈΠ΅.
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° βΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈβ, ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ Π·Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Ρ Π½Π°Π±ΠΎΡΠ° ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΠ΅ΡΠΈ ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°. ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΈΠ·Π±ΡΠ³Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°, ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΠΈ Π½Π° Π²Ρ
ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ.
ΡΠ°Π±Π»ΠΎΠ½
ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ EqualityComparable = requires(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - ΠΡΠΈΠ΅ΡΠΎ
Π΅ΠΊΡΠΏΠ°Π½Π·ΠΈΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²ΠΌΠ΅ΡΡΠΎ Π·Π°Π³Π»Π°Π²Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π½ΠΎΠ² Π½Π°ΡΠΈΠ½ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅, Π±Π΅Π· Π΄Π° Π²ΠΊΠ»ΡΡΠ²Π°Ρ Π·Π°Π³Π»Π°Π²Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΡΠ΅Π· β#includeβ. - ΠΠ°ΠΊΡΠΎΡ __VA_OPT__ Π·Π° Π°Π΄Π°ΠΏΡΠΈΠ²Π½ΠΎ ΡΠ°Π·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠΊΠ΅Π½ΠΈ Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° "" Π·Π° ΡΡΠΈΡΡΡΠ°Π½Π½ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° Π±ΠΈΡΠΎΠ²ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π»Π°ΠΌΠ±Π΄Π° ΡΠ»Π°Π²ΡΠ½Π΅ Π½Π° ΠΈΠ·ΡΠ°Π·ΠΈ "*this".
struct int_value {
int n = 0;
auto getter_fn() {
//ΠΠΠ¨Π:
// Π²ΡΡΡΠ°Π½Π΅ [=]() { Π²ΡΡΡΠ°Π½Π΅ n; };// ΠΠΠΠ Π:
return [=, *this]() { return n; };
}
}; - ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΡΡΠ΅Π· ΡΠΊΠ°Π·Π°ΡΠ΅Π» (Pointer-to-member), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΊΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΡΠ΅Π· ΠΈΠ·ΡΠ°Π·Π° βconst &β.
- ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡΡ Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Ρ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ, ΠΎΠΏΠΈΡΠ°Π½ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°
P0722R1 . - ΠΠ° ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅ Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ Π±Π΅Π· ΡΠΈΠΏ.
struct foo {
foo() = ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅;
constexpr foo(int) {}
};ΡΠ°Π±Π»ΠΎΠ½
auto get_foo() {
Π²ΡΡΡΠ°Π½Π΅ f;
}get_foo(); // ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π΅ΡΠ²Π΅Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ
get_foo (); - ΠΠ΅ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΈ Π»Π°ΠΌΠ±Π΄Π° ΠΈΠ·ΡΠ°Π·ΠΈ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ.
- Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ Π·Π° Π»Π°ΠΌΠ±Π΄Π° ΠΈΠ·ΡΠ°Π·ΠΈ (βauto f = [] (std::Π²Π΅ΠΊΡΠΎΡ v)").
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π½ΠΈΠ·ΠΎΠ²ΠΈ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΈ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π°.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π² ΡΡΠΈΠ» C - ΠΏΠΎΠ»Π΅ΡΠ°ΡΠ°, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈ Π² ΡΠΏΠΈΡΡΠΊΠ° Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
struct A {
intx;
int y;
int z = 123;
};A a {.x = 1, .z = 2}; // ax == 1, ay == 0, az == 2
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΡΠ°Π·Π½ΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΡΡΡΡΠΊΡΡΡΠ° ΠΎΡ Π΄Π°Π½Π½ΠΈ.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π²Π΅ΡΠΎΡΡΠ½ΠΈΡΠ΅ ΠΈ ΠΌΠ°Π»ΠΊΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΈΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΈ Π·Π° ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠ° Π·Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΠ° ΡΡΠ»ΠΎΠ²Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π° Π±ΡΠ΄Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Π½Π° (β[[Π²Π΅ΡΠΎΡΡΠ½ΠΎ]] Π°ΠΊΠΎ (ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ > 0) {β).
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² ΡΠΈΠΊΡΠ» βΠ·Π°β.
Π·Π° (auto v = std::vector{1, 2, 3}; auto& e : v) {
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ²Π° Π² new (βnew double[]{1,2,3}β);
- ΠΡΡΠΈΠ±ΡΡΡΡ β[[no_unique_address]]β, Π² ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π±Π΅Π· Π΄Π°Π½Π½ΠΈ Π½Π΅ Π·Π°Π΅ΠΌΠ°Ρ ΠΌΡΡΡΠΎ.
- ΠΡΠΎΠΌΠ½ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ (std::atomic > ΠΈ std::atomic >).
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠ»ΠΎΠ²Π½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ ΡΠ°ΠΌΠΎ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ.
consteval int sqr(int n) {
Π²ΡΡΡΠ°Π½Π΅ n * n;
}constexpr int r = sqr(100); // ΠΠΠΠ Π
int x = 100;
int r2 = sqr(x); // ΠΠ ΠΠ¨ΠΠ: 'x' Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° - ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° constexpr Ρ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ (βconstexpr virtual int f() const { return 2; }β).
- Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°:
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠΈΠΏΠ° char8_t Π·Π° UTF-8 Π½ΠΈΠ·ΠΎΠ²Π΅.
- ΠΠΎΠ±Π°Π²Π΅Π½ Π±ΠΈΡ Π·Π° Π·Π°Π³Π»Π°Π²Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ (Π±ΠΈΡΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ) ΠΈ Π²Π΅ΡΡΠΈΡ.
- ΠΠ΅ΡΠ΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° ΠΈ ΡΡΡΠΈΠΊΡΠ° Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅ΡΠ΅ (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 ΠΊΠ»Π°Ρ rgba_color_channel {ΡΠ΅ΡΠ²Π΅Π½ΠΎ, Π·Π΅Π»Π΅Π½ΠΎ, ΡΠΈΠ½ΡΠΎ, Π°Π»ΡΠ°};
std::string_view to_string(rgba_color_channel my_channel) {
ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅Π» (my_channel) {
ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° enum rgba_color_channel;
case red: Π²ΡΡΡΠ°Π½Π΅ Π½Π° "red";
case green: Π²ΡΡΡΠ°Π½Π΅ Π½Π° "green";
case blue: Π²ΡΡΡΠ°Π½Π΅ Π½Π° "ΡΠΈΠ½ΡΠΎ";
ΡΠ»ΡΡΠ°ΠΉ Π°Π»ΡΠ°: Π²ΡΡΠ½Π΅ "Π°Π»ΡΠ°";
}
} - Π ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅, ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° β,β (βa[b,c]β) Π΅ Π·Π°Π±ΡΠ°Π½Π΅Π½ΠΎ. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½ΠΈ Ρ ΠΊΠ»ΡΡΠΎΠ²Π°ΡΠ° Π΄ΡΠΌΠ° volatile, Π΅ ΠΏΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π°, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ β++β ΠΈ βββ ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅.
- ΠΠ°ΠΌΠ°Π»Π΅Π½ Π΅ Π±ΡΠΎΡΡ Π½Π° ΡΠΈΡΡΠ°ΡΠΈΠΈΡΠ΅, Π² ΠΊΠΎΠΈΡΠΎ "typename" ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°, Π·Π° Π΄Π° ΠΏΠΎΡΠΎΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠΈΠΏ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru