C++20 vexillum probatum

ISO Committee on Standardization of the C++ Language probatus vexillum internationale "I C ++». Facultates in specificatione, exceptis casibus solitariis, praesentatae; suscepit in compilers GCC, SONUS и Microsoft Visual C ++. Vulgatae bibliothecae C++20 subsidia intra documentum perficiuntur Boost.

In proximis duobus mensibus, specificatio approbata erit in stadio apparandi documentum ad publicationem, ad quem opus fiet in emendatione editorial errores orthographiae et typos. Primo Novembri, documentum consequens ISO mittetur ad publicationem sub nomine formali ISO/IEC 14882:2020. Interim consilium opus in proximo C++23 vexillo iam incohavit (C++2b) et optiones possibiles in proximo virtuali congressu considerabit. innovations.

Main features I C ++ (codice exempla):

  • Addidit "conceptas", extensiones template, quod permittit te definire a paro of template parametri requisita, quae, tempore compile, limitare argumentorum statuto, qui parametris templates accipi possunt. Conceptus adhiberi possunt ad vitandas repugnantias logicas inter proprietates notitiarum generum, quibus usus est in Formula et notitiis specierum proprietatum parametri initus.

    template
    conceptus aequalityComparable = requirit (T a, T b) {
    { a == b } -> std::boolean;
    { a != b } -> std::boolean;
    };

  • Accepit dilatatio ad operandum cum modulis qui pro fasciculis capitis adhiberi possunt. Moduli novam viam praebent ad fontem codicem ordinandum in definiendis partium compositionum finibus, nullis inclusis lima per "#includere".
  • Macro __VA_OPT__ ad adaptivam expansionem variarum macronum secundum praesentiam a signis in argumento variabili.
  • Firmamentum " "oratoris comparationis trium viarum".
  • Suscipe pro defectu elementi initializers pro bitfields.
  • Facultas ad captandas lambda "hoc" locutiones.

    instrúite int_value {
    int n = 0;
    Auto getter_fn () {
    //MALUS:
    // return [=]() { return n; };

    // BONUM:
    return [=, *hoc]() { return n; };
    }
    };

  • Elementa vocans a monstratore (Pointer-ad-membrum), argumentis utens obiectis temporalibus per expressionem "const &" definitam.
  • Procurator deletae cum destructore in documento descriptus P0722R1.
  • Classes in parametris templates sine typo uti permittuntur.

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

    template
    Auto get_foo () {
    reditus, -ae, f;
    }

    get_foo(); // utitur implicitus constructor
    get_foo ( );

  • Non-pervicax lambda locutionum cum constructor.
  • Formula permittens syntaxin ad expressions lambda ("auto f = [] (std ::vector v) ").
  • Facultas utendi literalis chordis in parametris template.
  • Support pro C-styli initializationis syntaxi - agri non explicite recensiti in indice initializationis per defaltam initialized sunt.

    instrue A {
    int;
    int y;
    int z = 123;
    };

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

  • Firmamentum inanis notitia structura membrorum.
  • Firmamentum pro verisimilibus et verisimilibus attributis certiorem facere optimizer de probabilitate constructionis conditionalis Urguet (“[[amilice]] si (rande > 0) {“).
  • Facultatem iugis ad initialize valores variabiles in "pro" loop

    pro (auto v = std::vector{1, 2, 3}; auto& e : v) {

  • Calculus automaticus in nova magnitudine ordinata ("nova duplici[]{1,2,3}");
  • Proprium "[[no_unique_address]]" attributum in quo variabiles sine notitia spatium non capiunt.
  • Atomicis indicibus (std :: nuclei > Et std :: nuclei >).
  • Facultas vocandi virtuales functiones in locutionibus conditionalibus.
  • Suscipe munera quae immediata non possunt nisi cum constantibus laborare.

    consteval int sqr (n int) {
    remittere n*n;
    }

    constexpr int r = sqr(100); // OK
    int x = 100;
    int r2 = sqr(x); // ERROR: 'x' pro constante adhiberi non potest

  • Possibilitas utendi constexpr cum functionibus virtualibus ("constexpr virtual int f() const {reditum 2; }").
  • in bibliotheca vexillum:
    • Auxilia addita pro char8_t typo pro chordis utf-8.
    • Adiectae sunt fasciculi header frenum (bit operationes) et versio.
    • Nunc fieri potest ut praepositionem et suffixo chordarum reprimat (incipit_ cum, finit_with).
    • Addidit std :: remove_cvref, std unwrap_reference, std unwrap_decay_ref, std ::is_nothrow_convertible et std :: type_identity lineamenta.
    • Munera addita std :: punctum, std ::lerp, std :: bind_front, std :: source_location, std :: visita, std ::is_constant_evaluated et std :: assume_aligned.
    • Addidit subsidium vestit ad std :: make_shared.
    • Munus addidit std::to_array convertendi res ordinatas sicut std :: ordinata.
  • Commodior syntaxis enumeratio:

    enum genus rgba_color_channel {rubrum, viride, caeruleum, alpha };

    std :: string_view to_string(rgba_color_channel my_channel) {
    switch (my_channel) {
    usus enum rgba_color_channel;
    casus ruber: redi "rubrum";
    casus viridis: revertere "viridis";
    caeruleum: return "hyacinthinum";
    casus alpha: return "alpha";
    }
    }

  • In indicibus, ob indefinitas mores, operationis usus "," ("a[b,c]") prohibetur. Auxilia maxime operationum cum variabilibus cum keyword volatili declarata discontinuata est, inter "++" et "-" operationes cum speciebus vexillum.
  • Numerum condicionum in quibus "typename" demonstrandum est coram typum reduximus.

Source: opennet.ru

Add a comment