C++20 เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เด…เด‚เด—เต€เด•เดฐเดฟเดšเตเดšเต

C++ เดญเดพเดทเดฏเตเดŸเต† เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเตˆเดธเต‡เดทเตป เดธเด‚เดฌเดจเตเดงเดฟเดšเตเดš ISO เด•เดฎเตเดฎเดฟเดฑเตเดฑเดฟ เด…เด‚เด—เต€เด•เดฐเดฟเดšเตเดšเต เด…เดจเตเดคเดพเดฐเดพเดทเตเดŸเตเดฐ เดจเดฟเดฒเดตเดพเดฐเด‚ "เดธเดฟ ++ 20". เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด•เดดเดฟเดตเตเด•เตพ, เด’เดฑเตเดฑเดชเตเดชเต†เดŸเตเดŸ เด•เต‡เดธเตเด•เตพ เด’เดดเดฟเด•เต†, เดชเดฟเดจเตเดคเตเดฃเดšเตเดšเต เด•เดฎเตเดชเตˆเดฒเดฑเตเด•เดณเดฟเตฝ เดœเดฟเดธเดฟเดธเดฟ, เด•เตเดฒเต‹เด‚เด—เต ะธ Microsoft เดตเดฟเดทเตเดตเตฝ เดธเดฟ ++. C++20 เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ เดชเตเดฐเต‹เดœเด•เตเดŸเดฟเดจเตเดณเตเดณเดฟเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต เด‰เดคเตเดคเต‡เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเด•.

เด…เดŸเตเดคเตเดค เดฐเดฃเตเดŸเต เดฎเดพเดธเดคเตเดคเดฟเดจเตเดณเตเดณเดฟเตฝ, เด…เด‚เด—เต€เด•เตƒเดค เดธเตเดชเต†เดธเดฟเดซเดฟเด•เตเด•เต‡เดทเตป เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเดจเตเดจ เด˜เดŸเตเดŸเดคเตเดคเดฟเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เด…เดคเดฟเตฝ เด…เด•เตเดทเดฐเดชเตเดชเดฟเดถเด•เตเด•เดณเตเดŸเต†เดฏเตเด‚ เด…เด•เตเดทเดฐเดคเตเดคเต†เดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดŽเดกเดฟเดฑเตเดฑเต‹เดฑเดฟเดฏเตฝ เดคเดฟเดฐเตเดคเตเดคเตฝ เดœเต‹เดฒเดฟเด•เตพ เดจเดŸเดคเตเดคเตเด‚. เดจเดตเด‚เดฌเตผ เด†เดฆเตเดฏเด‚, เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ เดชเตเดฐเดฎเดพเดฃเด‚ ISO/IEC 14882:2020 เดŽเดจเตเดจ เด”เดชเดšเดพเดฐเดฟเด• เดจเดพเดฎเดคเตเดคเดฟเตฝ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ ISO-เดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเด‚. เด‡เดคเดฟเดจเดฟเดŸเดฏเดฟเตฝ, เด•เดฎเตเดฎเดฟเดฑเตเดฑเดฟ เด…เดŸเตเดคเตเดค C++23 เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเดฟเดจเตเดฑเต† (C++2b) เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด†เดฐเด‚เดญเดฟเดšเตเดšเตเด•เดดเดฟเดžเตเดžเต, เด…เดคเดฟเดจเตเดฑเต† เด…เดŸเตเดคเตเดค เดตเต†เตผเดšเตเดตเตฝ เดฎเต€เดฑเตเดฑเดฟเด‚เด—เดฟเตฝ เดธเดพเดงเตเดฏเดฎเดพเดฏ เด“เดชเตเดทเดจเตเด•เตพ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด‚. เดชเตเดคเตเดฎเด•เตพ.

เดชเตเดฐเดงเดพเดจ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดธเดฟ ++ 20 (เด•เต‹เดกเต เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ):

  • เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด†เดตเดถเตเดฏเด•เดคเด•เตพ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ "เดธเด™เตเด•เดฒเตเดชเด™เตเด™เตพ", เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด™เตเด™เตพ เดšเต‡เตผเดคเตเดคเต, เด…เดคเต เด•เด‚เดชเตˆเตฝ เดธเดฎเดฏเดคเตเดคเต, เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเดพเดฏเดฟ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เดณเตเดŸเต† เดธเต†เดฑเตเดฑเต เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต. เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเดฟเดจเตเดณเตเดณเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดกเดพเดฑเตเดฑเดพ เดคเดฐเด™เตเด™เดณเตเดŸเต† เด—เตเดฃเด™เตเด™เดณเตเด‚ เด‡เตปเดชเตเดŸเตเดŸเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเดŸเต† เดกเดพเดฑเตเดฑเดพ เดคเดฐเด‚ เด—เตเดฃเด™เตเด™เดณเตเด‚ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดฒเต‹เดœเดฟเด•เตเด•เตฝ เดชเตŠเดฐเตเดคเตเดคเด•เตเด•เต‡เดŸเตเด•เตพ เด’เดดเดฟเดตเดพเด•เตเด•เดพเตป เด†เดถเดฏเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.

    เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต
    เด†เดถเดฏ เดธเดฎเดคเตเดตเด‚ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดตเตเดจเตเดจ = เด†เดตเดถเตเดฏเดฎเดพเดฃเต (T a, T b) {
    { a == b } -> std:: boolean;
    { a != b } -> std::boolean;
    };

  • เดธเตเดตเต€เด•เดฐเดฟเดšเตเดšเต เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเด‚ เดนเต†เดกเตเดกเตผ เดซเดฏเดฒเตเด•เตพเด•เตเด•เต เดชเด•เดฐเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดตเตเดจเตเดจ เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต. "#include" เดตเดดเดฟ เดนเต†เดกเตเดกเตผ เดซเดฏเดฒเตเด•เตพ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดคเต†, เด˜เดŸเด•เด™เตเด™เดณเตเดŸเต† เด…เดคเดฟเดฐเตเด•เตพ เดจเดฟเตผเดตเดšเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เด“เตผเด—เดจเตˆเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดชเตเดคเดฟเดฏ เดฎเดพเตผเด—เตเด—เด‚ เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ เดจเตฝเด•เตเดจเตเดจเต.
  • เดฎเดพเด•เตเดฐเต‹ __VA_OPT__ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเดฟเดฒเต† เดŸเต‹เด•เตเด•เดฃเตเด•เดณเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเด‚ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดฎเดพเด•เตเดฐเต‹เด•เดณเตเดŸเต† เด…เดกเดพเดชเตเดฑเตเดฑเต€เดตเต เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ.
  • เดคเตเดฐเต€-เดตเต‡ เดคเดพเดฐเดคเดฎเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ "" เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผเด•เตเด•เตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ.
  • เดฌเดฟเดฑเตเดฑเตเดซเต€เตฝเดกเตเด•เตพเด•เตเด•เตเดณเตเดณ เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดŽเดฒเดฎเต†เดจเตเดฑเต เด‡เดจเต€เดทเตเดฏเดฒเตˆเดธเดฑเตเด•เตพเด•เตเด•เตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ.
  • เดฒเดพเด‚เดก "*เดˆ" เดŽเด•เตเดธเตเดชเตเดฐเดทเดจเตเด•เตพ เดชเดฟเดŸเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต.

    struct int_value {
    int n = 0;
    auto getter_fn() {
    //เดฎเต‹เดถเด‚:
    // เดฎเดŸเด•เตเด•เด‚ [=]() { เดคเดฟเดฐเดฟเดšเตเดšเต n; };

    // เดจเดฒเตเดฒเดคเต:
    เดฎเดŸเด™เตเด™เตเด• [=, *เด‡เดคเต]() {เดคเดฟเดฐเต‡เด•เตเด• n; };
    }
    };

  • "const &" เดŽเด•เตโ€Œเดธเตโ€Œเดชเตเดฐเดทเดจเดฟเดฒเต‚เดŸเต† เดจเดฟเตผเดตเดšเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เดฏเดฟเดจเตเดฑเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ (เดชเต‹เดฏเดฟเดจเตเดฑเตผ-เดŸเต-เดฎเต†เดฎเตเดชเตผ) เดตเดดเดฟ เด˜เดŸเด•เด™เตเด™เดณเต† เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต.
  • เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดกเดฟเดธเตเดŸเตเดฐเด•เตเดฑเตเดฑเดฑเตเดณเตเดณ เดกเดฟเดฒเต€เดฑเตเดฑเต เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ P0722R1.
  • เด’เดฐเต เดคเดฐเดฎเดฟเดฒเตเดฒเดพเดคเต† เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด•เตเดฒเดพเดธเตเด•เดณเต† เด…เดจเตเดตเดฆเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

    struct foo {
    foo() = default;
    constexpr foo(int) {}
    };

    เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต
    เด“เดŸเตเดŸเต‹ get_foo() {
    เดคเดฟเดฐเดฟเด•เต† f;
    }

    get_foo(); // เด‡เด‚เดชเตเดฒเดฟเดธเดฟเดฑเตเดฑเต เด•เตบเดธเตเดŸเตเดฐเด•เตเดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต
    get_foo ();

  • เด•เตบเดธเตเดŸเตเดฐเด•เตโ€ŒเดŸเดฑเดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดฅเดฟเดฐเดคเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เดฒเดพเด‚เดก เดŽเด•เตโ€Œเดธเตโ€Œเดชเตเดฐเดทเดจเตเด•เตพ.
  • เดฒเดพเด‚เดก เดŽเด•เตเดธเตเดชเตเดฐเดทเดจเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดตเดพเด•เตเดฏเด˜เดŸเดจ เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต (โ€œเด“เดŸเตเดŸเต‹ เดŽเดซเต = [] (std::vector v)").
  • เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเดฟเตฝ เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดฒเดฟเดฑเตเดฑเดฑเดฒเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต.
  • เดธเดฟ-เดธเตเดฑเตเดฑเตˆเตฝ เด‡เดจเต€เดทเตเดฏเดฒเตˆเดธเต‡เดทเตป เดธเดฟเดจเตเดฑเดพเด•เตเดธเดฟเดจเตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ - เด‡เดจเต€เดทเตเดฏเดฒเตˆเดธเต‡เดทเตป เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดฒเดฟเดธเตเดฑเตเดฑเตเดšเต†เดฏเตเดคเดฟเดŸเตเดŸเดฟเดฒเตเดฒเดพเดคเตเดค เดซเต€เตฝเดกเตเด•เตพ เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต.

    เด˜เดŸเดจ เดŽ {
    int x;
    int y;
    int z = 123;
    };

    A a {.x = 1, .z = 2}; // เด•เต‹เดŸเดพเดฒเดฟ == 1, ay == 0, az == 2

  • เดถเต‚เดจเตเดฏเดฎเดพเดฏ เดกเดพเดฑเตเดฑ เด˜เดŸเดจ เด…เด‚เด—เด™เตเด™เตพเด•เตเด•เตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ.
  • เดธเต‹เดชเดพเดงเดฟเด• เดจเดฟเตผเดฎเตเดฎเดพเดฃเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดธเดพเดงเตเดฏเดคเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเดฑเดฟเดจเต† เด…เดฑเดฟเดฏเดฟเด•เตเด•เดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดณเตเดณเดคเตเด‚ เดธเดพเดงเตเดฏเดคเดฏเดฟเดฒเตเดฒเดพเดคเตเดคเดคเตเดฎเดพเดฏ เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เตพเด•เตเด•เตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ (โ€œ[[เดธเดพเดงเตเดฏเดค]] เดŽเด™เตเด•เดฟเตฝ (เดฑเดพเตปเดกเด‚ > 0) {โ€œ).
  • "เดซเต‹เตผ" เดฒเต‚เดชเตเดชเดฟเตฝ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดถเตเดฐเต‡เดฃเดฟเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต

    เดตเต‡เดฃเตเดŸเดฟ (เด“เดŸเตเดŸเต‹ v = std:: เดตเต†เด•เตเดฑเตเดฑเตผ{1, 2, 3}; auto& e : v) {

  • เดชเตเดคเดฟเดฏ (โ€œเดชเตเดคเดฟเดฏ เด‡เดฐเดŸเตเดŸ[]{1,2,3}โ€) เดŽเดจเตเดจเดคเดฟเดฒเต† เด…เดฑเต‡ เดตเดฒเตเดชเตเดชเดคเตเดคเดฟเดจเตเดฑเต† เดฏเดพเดจเตเดคเตเดฐเดฟเด• เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเตฝ;
  • เดกเดพเดฑเตเดฑ เด‡เดฒเตเดฒเดพเดคเตเดค เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เด‡เดŸเด‚ เดชเดฟเดŸเดฟเด•เตเด•เดพเดคเตเดค "[[no_unique_address]]" เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต.
  • เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต เดชเต‹เดฏเดฟเดจเตเดฑเดฑเตเด•เตพ (std::atomic > เด’เดชเตเดชเด‚ std:: เด†เดฑเตเดฑเต‹เดฎเดฟเด•เต >).
  • เดธเต‹เดชเดพเดงเดฟเด• เดŽเด•เตเดธเตเดชเตเดฐเดทเดจเตเด•เดณเดฟเตฝ เดตเต†เตผเดšเตเดตเตฝ เดซเด‚เด—เตเดทเดจเตเด•เตพ เดตเดฟเดณเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต.
  • เดธเตเดฅเดฟเดฐเดพเด™เตเด•เด™เตเด™เดณเดฟเตฝ เดฎเดพเดคเตเดฐเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด‰เดŸเดจเดŸเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพเด•เตเด•เตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ.

    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; }โ€).
  • เดธเดพเดงเดพเดฐเดฃ เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ:
    • UTF-8 เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เตพเด•เตเด•เดพเดฏเดฟ char8_t เดคเดฐเดคเตเดคเดฟเดจเตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ เดšเต‡เตผเดคเตเดคเต.
    • เดนเต†เดกเตผ เดซเดฏเดฒเตเด•เตพ เดฌเดฟเดฑเตเดฑเตเด‚ (เดฌเดฟเดฑเตเดฑเต เด“เดชเตเดชเดฑเต‡เดทเดจเตเด•เตพ) เดชเดคเดฟเดชเตเดชเตเด‚ เดšเต‡เตผเดคเตเดคเต.
    • เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เดณเตเดŸเต† เดชเตเดฐเดฟเดซเดฟเด•เตโ€Œเดธเตเด‚ เดธเดซเดฟเด•เตโ€Œเดธเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เด‡เดชเตเดชเต‹เตพ เดธเดพเดงเตเดฏเดฎเดพเดฃเต (เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเต_เด•เต‚เดŸเต†, เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเดจเตเดจเดคเต_เดตเดฟเดคเตเดคเต).
    • std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nthrow_convertible, std::type_identity traits เดŽเดจเตเดจเดฟเดต เดšเต‡เตผเดคเตเดคเต.
    • 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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•