C++ 20 เจธเจŸเฉˆเจ‚เจกเจฐเจก เจจเฉ‚เฉฐ เจฎเจจเจœเจผเฉ‚เจฐเฉ€ เจฆเจฟเฉฑเจคเฉ€ เจ—เจˆ

C++ เจญเจพเจธเจผเจพ เจฆเฉ‡ เจฎเจพเจจเจ•เฉ€เจ•เจฐเจจ 'เจคเฉ‡ ISO เจ•เจฎเฉ‡เจŸเฉ€ เจจเฉ‚เฉฐ เจฎเจจเจœเจผเฉ‚เจฐเฉ€ เจฆเจฟเฉฑเจคเฉ€ เจ…เฉฐเจคเจฐเจฐเจพเจธเจผเจŸเจฐเฉ€ เจฎเจฟเจ†เจฐ"เจธเฉ€ ++ 20". เจตเฉฑเจ–-เจตเฉฑเจ– เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจฆเฉ‡ เจ…เจชเจตเจพเจฆ เจฆเฉ‡ เจจเจพเจฒ, เจจเจฟเจฐเจงเจพเจฐเจจ เจตเจฟเฉฑเจš เจชเฉ‡เจธเจผ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ‚, เจธเจนเจฟเจฏเฉ‹เจ—เฉ€ เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจตเจฟเฉฑเจš เจœเฉ€.เจธเฉ€.เจธเฉ€., เจตเฉฑเจœเจฃเจพ ะธ เจฎเจพเจˆเจ•เจฐเฉ‹เจธเจพเจซเจŸ เจตเจฟเจœเจผเฉ‚เจ…เจฒ เจธเฉ€ ++. C++ 20 เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจจ เจตเจพเจฒเฉ€เจ†เจ‚ เจฎเจฟเจ†เจฐเฉ€ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจ เจฐเฉฑเจ–เจฃเฉ‡.

เจ…เจ—เจฒเฉ‡ เจฆเฉ‹ เจฎเจนเฉ€เจจเจฟเจ†เจ‚ เจตเจฟเฉฑเจš, เจชเฉเจฐเจตเจพเจจเจฟเจค เจจเจฟเจฐเจงเจพเจฐเจจ เจชเฉเจฐเจ•เจพเจธเจผเจจ เจฒเจˆ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจคเจฟเจ†เจฐ เจ•เจฐเจจ เจฆเฉ‡ เจชเฉœเจพเจ… 'เจคเฉ‡ เจนเฉ‹เจตเฉ‡เจ—เจพ, เจœเจฟเจธ 'เจคเฉ‡ เจธเจชเฉˆเจฒเจฟเฉฐเจ— เจ—เจฒเจคเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจŸเจพเจˆเจชเฉ‹เจœเจผ เจฆเฉ‡ เจธเฉฐเจชเจพเจฆเจ•เฉ€ เจธเฉเจงเจพเจฐ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค เจจเจตเฉฐเจฌเจฐ เจฆเฉ‡ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš, เจจเจคเฉ€เจœเจพ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ ISO/IEC 14882:2020 เจฆเฉ‡ เจฐเจธเจฎเฉ€ เจจเจพเจฎ เจนเฉ‡เจ  เจชเฉเจฐเจ•เจพเจธเจผเจจ เจฒเจˆ ISO เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพเฅค เจ‡เจธ เจฆเฉŒเจฐเจพเจจ, เจ•เจฎเฉ‡เจŸเฉ€ เจจเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ…เจ—เจฒเฉ‡ C++23 เจธเจŸเฉˆเจ‚เจกเจฐเจก (C++2b) 'เจคเฉ‡ เจ•เฉฐเจฎ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‰เจน เจ†เจชเจฃเฉ€ เจ…เจ—เจฒเฉ€ เจตเจฐเจšเฉเจ…เจฒ เจฎเฉ€เจŸเจฟเฉฐเจ— เจตเจฟเฉฑเจš เจธเฉฐเจญเจพเจตเจฟเจค เจตเจฟเจ•เจฒเจชเจพเจ‚ 'เจคเฉ‡ เจตเจฟเจšเจพเจฐ เจ•เจฐเฉ‡เจ—เฉ€เฅค เจจเจตเฉ€เจจเจคเจพเจตเจพเจ‚.

เจฎเฉเฉฑเจ– เจซเฉ€เจšเจฐ เจธเฉ€ ++ 20 (เจ•เฉ‹เจก เจ‰เจฆเจพเจนเจฐเจจ):

  • เจœเฉ‹เฉœเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ "เจธเฉฐเจ•เจฒเจชเจพเจ‚", เจŸเฉˆเจฎเจชเจฒเฉ‡เจŸ เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจเจพเจ‚, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจŸเฉˆเจฎเจชเจฒเฉ‡เจŸ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฒเฉ‹เฉœเจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเฉˆเฉฑเจŸ เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ, เจœเฉ‹ เจ•เจฟ เจ•เฉฐเจชเจพเจˆเจฒ เจธเจฎเฉ‡เจ‚, เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸเจพเจ‚ เจฆเฉ‡ เจธเฉˆเฉฑเจŸ เจจเฉ‚เฉฐ เจธเฉ€เจฎเจฟเจค เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจŸเฉˆเจฎเจชเจฒเฉ‡เจŸ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจตเจœเฉ‹เจ‚ เจธเจตเฉ€เจ•เจพเจฐ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจธเฉฐเจ•เจฒเจชเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจตเจฐเจคเฉ€เจ†เจ‚ เจœเจพเจ‚เจฆเฉ€เจ†เจ‚ เจกเฉ‡เจŸเจพ เจ•เจฟเจธเจฎเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจจเจชเฉเจŸ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจกเฉ‡เจŸเจพ เจ•เจฟเจธเจฎเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจตเจฟเจšเจ•เจพเจฐ เจคเจฐเจ•เจชเฉ‚เจฐเจจ เจ…เจธเฉฐเจ—เจคเจคเจพเจตเจพเจ‚ เจคเฉ‹เจ‚ เจฌเจšเจฃ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

    เจŸเฉˆเจฎเจชเจฒเฉ‡เจŸ
    เจธเฉฐเจ•เจฒเจช เจธเจฎเจพเจจเจคเจพ เจคเฉเจฒเจจเจพเจฏเฉ‹เจ— = เจฒเฉ‹เฉœเจพเจ‚ (T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • เจธเจตเฉ€เจ•เจพเจฐ เจ•เจฐ เจฒเจฟเจ† เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจเจพเจ‚ เจฎเฉŒเจกเจฟเจŠเจฒเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจœเฉ‹ เจนเฉˆเจกเจฐ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจฌเจœเจพเจ เจตเจฐเจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจฎเฉ‹เจกเฉ€เจŠเจฒ "#เจธเจผเจพเจฎเจฒ" เจฐเจพเจนเฉ€เจ‚ เจธเจฟเจฐเจฒเฉ‡เจ– เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡ เจฌเจฟเจจเจพเจ‚, เจญเจพเจ—เจพเจ‚ เจฆเฉ€เจ†เจ‚ เจธเฉ€เจฎเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจธเฉฐเจ—เจ เจฟเจค เจ•เจฐเจจ เจฆเจพ เจ‡เฉฑเจ• เจจเจตเจพเจ‚ เจคเจฐเฉ€เจ•เจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค
  • เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจตเจฟเฉฑเจš เจŸเฉ‹เจ•เจจเจพเจ‚ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฎเฉˆเจ•เจฐเฉ‹ เจฆเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒ เจตเจฟเจธเจคเจพเจฐ เจฒเจˆ เจฎเฉˆเจ•เจฐเฉ‹ __VA_OPT__เฅค
  • เจคเจฟเฉฐเจจ-เจชเฉฑเจ–เฉ€ เจคเฉเจฒเจจเจพ เจฒเจˆ " "เจ†เจชเจฐเฉ‡เจŸเจฐ เจฒเจˆ เจธเจนเจฟเจฏเฉ‹เจ—เฅค
  • เจฌเจฟเฉฑเจŸเจซเฉ€เจฒเจกเจพเจ‚ เจฒเจˆ เจกเจฟเจซเฉŒเจฒเจŸ เจเจฒเฉ€เจฎเฉˆเจ‚เจŸ เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเจฟเจ†เจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจเฅค
  • เจฒเจพเจ‚เจฌเจกเจพ "*เจ‡เจธ" เจธเจฎเฉ€เจ•เจฐเจจ เจจเฉ‚เฉฐ เจ•เฉˆเจชเจšเจฐ เจ•เจฐเจจ เจฆเฉ€ เจธเจฎเจฐเฉฑเจฅเจพเฅค

    struct int_value {
    int n = 0;
    auto getter_fn() {
    //เจฎเจพเฉœเจพ:
    // เจตเจพเจชเจธเฉ€ [=]() { เจตเจพเจชเจธเฉ€ n; };

    // เจšเฉฐเจ—เจพ:
    เจตเจพเจชเจธเฉ€ [=, *เจ‡เจน]() { เจตเจพเจชเจธเฉ€ n; };
    }
    };

  • เจชเฉเจ†เจ‡เฉฐเจŸเจฐ (เจชเฉเจ†เจ‡เฉฐเจŸเจฐ-เจŸเฉ‚-เจฎเฉˆเจ‚เจฌเจฐ) เจฆเฉเจ†เจฐเจพ เจเจฒเฉ€เจฎเฉˆเจ‚เจŸเจธ เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจจเจพ, "const &" เจธเจฎเฉ€เจ•เจฐเจจ เจฆเฉเจ†เจฐเจพ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ…เจธเจฅเจพเจˆ เจตเจธเจคเฉ‚เจ†เจ‚ เจฒเจˆ เจชเฉเจ†เจ‡เฉฐเจŸเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจเฅค
  • เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจตเจฟเฉฑเจš เจตเจฐเจฃเจฟเจค เจ‡เฉฑเจ• เจตเจฟเจจเจพเจธเจผเจ•เจพเจฐ เจฆเฉ‡ เจจเจพเจฒ เจฎเจฟเจŸเจพเจ“ เจ“เจชเจฐเฉ‡เจŸเจฐ P0722R1.
  • เจ•เจฒเจพเจธเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจนเฉˆเฅค

    struct foo {
    foo() = เจกเจฟเจซเจพเจฒเจŸ;
    constexpr foo(int) {}
    };

    เจŸเฉˆเจฎเจชเจฒเฉ‡เจŸ
    เจ†เจŸเฉ‹ get_foo() {
    เจตเจพเจชเจธเฉ€ f;
    }

    get_foo(); // เจ…เจชเฉเจฐเจคเฉฑเจ– เจ•เฉฐเจธเจŸเจฐเจ•เจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ
    get_foo ();

  • เจ•เฉฐเจธเจŸเจฐเจ•เจŸเจฐ เจฆเฉ‡ เจจเจพเจฒ เจ—เฉˆเจฐ-เจธเจฅเจพเจˆ เจฒเจพเจ‚เจฌเจกเจพ เจธเจฎเฉ€เจ•เจฐเจจเฅค
  • เจฒเฉˆเจ‚เจฌเจกเจพ เจธเจฎเฉ€เจ•เจฐเจจ (โ€œเจ†เจŸเฉ‹ f = [] เจฒเจˆ เจŸเฉˆเจฎเจชเจฒเฉ‡เจŸ เจธเฉฐเจŸเฉˆเจ•เจธ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเฉ‡ เจฐเจฟเจนเจพ เจนเฉˆ (std::vector v)").
  • เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจธเจŸเฉเจฐเจฟเฉฐเจ— เจฒเจฟเจŸเจฐเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจธเจฎเจฐเฉฑเจฅเจพเฅค
  • C-เจธเจผเฉˆเจฒเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจธเฉฐเจŸเฉˆเจ•เจธ เจฒเจˆ เจธเจฎเจฐเจฅเจจ - เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจธเจชเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเฉ‚เจšเฉ€เจฌเฉฑเจง เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ‡ เจ—เจ เจ–เฉ‡เจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

    struct A {
    เจ‡เฉฐเจŸ x;
    int y;
    int z = 123;
    };

    A a {.x = 1, .z = 2}; // ax == 1, ay == 0, az == 2

  • เจ–เจพเจฒเฉ€ เจกเจพเจŸเจพ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ‡ เจฎเฉˆเจ‚เจฌเจฐเจพเจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจเฅค
  • เจธเฉฐเจญเจพเจตเจฟเจค เจ…เจคเฉ‡ เจ…เจธเฉฐเจญเจต เจ—เฉเจฃเจพเจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจœเฉ‹ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ เจจเฉ‚เฉฐ เจšเจพเจฒเฉ‚ เจนเฉ‹เจฃ เจฆเฉ€ เจธเจผเจฐเจคเฉ€เจ† เจฐเจšเจจเจพ เจฆเฉ€ เจธเฉฐเจญเจพเจตเจจเจพ เจฌเจพเจฐเฉ‡ เจธเฉ‚เจšเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ (โ€œ[[เจธเฉฐเจญเจพเจตเจจเจพ]] เจœเฉ‡เจ•เจฐ (เจฌเฉ‡เจคเจฐเจคเฉ€เจฌ > 0) {โ€œ)เฅค
  • "เจฒเจˆ" เจฒเฉ‚เจช เจตเจฟเฉฑเจš เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฎเฉเฉฑเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจฒเจˆ เจฐเฉ‡เจ‚เจœเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจธเจฎเจฐเฉฑเจฅเจพ

    เจฒเจˆ (เจ†เจŸเฉ‹ v = std::vector{1, 2, 3}; auto& e : v) {

  • เจจเจตเฉ‡เจ‚ เจตเจฟเฉฑเจš เจเจฐเฉ‡ เจ†เจ•เจพเจฐ เจฆเฉ€ เจธเจตเฉˆเจšเจฒเจฟเจค เจ—เจฃเจจเจพ (โ€œเจจเจตเจพเจ‚ เจกเจฌเจฒ[]{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 virtual int f() const { return 2; }") เจฆเฉ‡ เจจเจพเจฒ constexpr เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจธเฉฐเจญเจพเจตเจจเจพเฅค
  • เจฎเจฟเจ†เจฐเฉ€ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจตเจฟเฉฑเจš:
    • UTF-8 เจธเจคเจฐ เจฒเจˆ char8_t เจ•เจฟเจธเจฎ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจœเฉ‹เฉœเจฟเจ† เจ—เจฟเจ†เฅค
    • เจธเจฟเจฐเจฒเฉ‡เจ– เจซเจพเจˆเจฒเจพเจ‚ เจฌเจฟเฉฑเจŸ (เจฌเจฟเฉฑเจŸ เจ“เจชเจฐเฉ‡เจธเจผเจจ) เจ…เจคเฉ‡ เจธเฉฐเจธเจ•เจฐเจฃ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ†เฅค
    • เจธเจคเจฐ เจฆเฉ‡ เจ…เจ—เฉ‡เจคเจฐ เจ…เจคเฉ‡ เจชเจฟเจ›เฉ‡เจคเจฐ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจเจพ เจนเฉเจฃ เจธเฉฐเจญเจต เจนเฉˆ (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::array เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฃ เจฒเจˆ std::to_array เจซเฉฐเจ•เจธเจผเจจ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ†เฅค
  • เจตเจงเฉ‡เจฐเฉ‡ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจ—เจฃเจจเจพ เจธเฉฐเจŸเฉˆเจ•เจธ:

    enum เจ•เจฒเจพเจธ rgba_color_channel { เจฒเจพเจฒ, เจนเจฐเจพ, เจจเฉ€เจฒเจพ, เจ…เจฒเจซเจผเจพ };

    std::string_view to_string(rgba_color_channel my_channel) {
    เจฌเจฆเจฒเฉ‹ (my_channel) {
    enum rgba_color_channel เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ;
    เจ•เฉ‡เจธ เจฒเจพเจฒ: เจตเจพเจชเจธ "เจฒเจพเจฒ";
    เจ•เฉ‡เจธ เจนเจฐเจพ: เจตเจพเจชเจธ "เจนเจฐเจพ";
    เจ•เฉ‡เจธ เจจเฉ€เจฒเจพ: เจตเจพเจชเจธ "เจจเฉ€เจฒเจพ";
    เจ•เฉ‡เจธ เจ…เจฒเจซเจผเจพ: เจตเจพเจชเจธเฉ€ "เจ…เจฒเจซเจผเจพ";
    }
    }

  • เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจตเจฟเฉฑเจš, เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจตเจฟเจตเจนเจพเจฐ เจฆเฉ‡ เจ•เจพเจฐเจจ, เจ“เจชเจฐเฉ‡เจธเจผเจจ "," ("a[b,c]") เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ€ เจฎเจจเจพเจนเฉ€ เจนเฉˆเฅค เจ…เจธเจฅเจฟเจฐ เจ•เฉ€เจตเจฐเจก เจจเจพเจฒ เจ˜เฉ‹เจธเจผเจฟเจค เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจ“เจชเจฐเฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจฌเฉฐเจฆ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจœเจฟเจธ เจตเจฟเฉฑเจš เจฎเจฟเจ†เจฐเฉ€ เจ•เจฟเจธเจฎเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ โ€œ++โ€ เจ…เจคเฉ‡ โ€œโ€”โ€ เจ“เจชเจฐเฉ‡เจธเจผเจจ เจธเจผเจพเจฎเจฒ เจนเจจเฅค
  • เจ‰เจนเจจเจพเจ‚ เจธเจฅเจฟเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจธเฉฐเจ–เจฟเจ† เจจเฉ‚เฉฐ เจ˜เจŸเจพเจ‡เจ† เจœเจฟเจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ•เจฟเจธเจฎ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจฃ เจฒเจˆ "เจŸเจพเจˆเจชเจจเจพเจฎ" เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค

เจธเจฐเฉ‹เจค: opennet.ru

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹