ΠžΠ΄ΠΎΠ±Ρ€Π΅Π½ стандарт C++20

ΠšΠΎΠΌΠΈΡ‚Π΅Ρ‚ Π½Π° ISO ΠΏΠΎ стандартизация Π½Π° Π΅Π·ΠΈΠΊΠ° C++ ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π΅Π½ стандарт "C ++ 20". Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅, прСдставСни Π² спСцификацията, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ случаи, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ GCC, Кланг ΠΈ Microsoft Visual C ++. Π’ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° са Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ стандартни Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ C++20 Π£Π²Π΅Π»ΠΈΡ‡Π΅Ρ‚Π΅.

ΠŸΡ€Π΅Π· слСдващитС Π΄Π²Π° мСсСца ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π°Ρ‚Π° спСцификация Ρ‰Π΅ бъдС Π½Π° Π΅Ρ‚Π°ΠΏ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π·Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅, ΠΊΠ°Ρ‚ΠΎ Ρ‰Π΅ сС Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΎΠ½Π½Π° корСкция Π½Π° правописни ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ. Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ получСният Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Ρ‰Π΅ бъдС ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ Π½Π° ISO Π·Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ ΠΏΠΎΠ΄ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ ISO/IEC 14882:2020. ΠœΠ΅ΠΆΠ΄ΡƒΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ комисията Π²Π΅Ρ‡Π΅ Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ слСдващия стандарт C++23 (C++2b) ΠΈ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΈ Π½Π° слСдващото си Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΎ засСданиС. ΠΈΠ½ΠΎΠ²Π°Ρ†ΠΈΠΈ.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° Удобства C ++ 20 (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΊΠΎΠ΄ΠΎΠ²Π΅):

  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са β€žΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈβ€œ, Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π° шаблони, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈ позволяват Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ изисквания Π·Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° шаблони, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Ρ‚ Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠ΅Ρ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° шаблона. ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° избягванС Π½Π° логичСски Π½Π΅ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ свойствата Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° шаблона, ΠΈ свойствата Π½Π° Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½ΠΈ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ.

    шаблон
    концСпция 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€