Kōmike ISO no ka hoʻoponopono ʻana i ka ʻōlelo C++ aponoia kūlana honua"C ++ 20". ʻO nā mea hiki i hōʻike ʻia ma ka kikoʻī, koe naʻe nā hihia kaʻawale, kākoʻo ʻia i nā mea hōʻuluʻulu GCC, kani и ʻO Microsoft Visual C ++. Hoʻokomo ʻia nā hale waihona puke maʻamau e kākoʻo ana iā C++20 i loko o ka papahana Boost.
I nā mahina ʻelua e hiki mai ana, aia ka ʻōlelo kikoʻī i ʻāpono ʻia ma ke kahua o ka hoʻomākaukau ʻana i ka palapala no ka paʻi ʻana, kahi e hoʻokō ʻia ai ka hana ma ka hoʻoponopono hoʻoponopono ʻana i nā kuhi hewa a me nā typos. I ka hoʻomaka ʻana o Nowemapa, e hoʻouna ʻia ka palapala hopena i ISO no ka paʻi ʻana ma lalo o ka inoa inoa ISO/IEC 14882:2020. I kēia manawa, ua hoʻomaka ke kōmike i ka hana ma ka C++ 23 maʻamau (C++ 2b) a e noʻonoʻo i nā koho hiki i kāna hālāwai virtual e hiki mai ana. nā mea hou.
Hoʻohui ʻia nā "manaʻo", nā hoʻonui template, e ʻae iā ʻoe e wehewehe i kahi hoʻonohonoho o nā koi hoʻohālikelike template, i ka manawa hōʻuluʻulu, e kaupalena i ka hoʻonohonoho o nā manaʻo i hiki ke ʻae ʻia e like me nā ʻāpana template. Hiki ke hoʻohana ʻia nā manaʻo no ka pale ʻana i nā ʻano like ʻole ma waena o nā waiwai o nā ʻano ʻikepili i hoʻohana ʻia i loko o ka template a me nā waiwai ʻano ʻikepili o nā ʻāpana hoʻokomo.
template
manaʻo EqualityComparable = pono(T a, T b) {
{a == b } -> std::boolean;
{ a != b } -> std::boolean;
};
Ua ʻae ʻia hoʻopau no ka hana ʻana me nā modules hiki ke hoʻohana ʻia ma kahi o nā faila poʻomanaʻo. Hāʻawi nā modula i kahi ala hou e hoʻonohonoho ai i ka code kumu e pili ana i ka wehewehe ʻana i nā palena o nā ʻāpana, me ka hoʻokomo ʻole ʻana i nā faila poʻomanaʻo ma o "#include".
Macro __VA_OPT__ no ka hoʻonui hoʻololi ʻana o nā macros ma muli o ke ʻano o nā hōʻailona ma ka hoʻopaʻapaʻa hoʻololi.
Kākoʻo no ka mea hoʻohana "" no ka hoʻohālikelike ʻekolu ala.
Kākoʻo no nā mea hoʻomaka mua no nā bitfields.
Hiki iā lambda ke hopu i nā huaʻōlelo "*keia".
struct int_value {
int n = 0;
'akomi loaʻa_fn() {
// INO:
// ho'i [=]() { ho'i n; };
loaʻa_foo(); // hoʻohana i ka mea hana implicit
loaa_foo ();
Nā ʻōlelo lambda hoʻomau ʻole me ka mea hana.
ʻAe ʻia ka syntax template no nā ʻōlelo lambda (“auto f = [] (std::vector v)").
Hiki ke hoʻohana i nā string literals i nā ʻāpana template.
Kākoʻo no ka hoʻomaka ʻana o ke ʻano C - ʻaʻole i hoʻopaʻa inoa ʻia i ka papa inoa hoʻomaka.
struct A {
intx;
int y;
int z = 123;
};
A a {.x = 1, .z = 2}; // ax == 1, ay == 0, az == 2
Kākoʻo no nā lālā hoʻolālā ʻikepili hakahaka.
Kākoʻo i nā ʻano like ʻole a hiki ʻole ke hoʻomaopopo i ka mea hoʻoponopono e pili ana i ka hiki ke hoʻomaka ʻia ke kūkulu kūlana (“[[likely]] inā (random > 0) {“).
Hiki ke hoʻohana i nā pae e hoʻomaka i nā waiwai hoʻololi i kahi "no" loop
no (auto v = std::vector{1, 2, 3}; auto& e : v) {
Ka helu 'akomi o ka nui o ka laha i ka mea hou (“new double[]{1,2,3}”);
ʻO ke ʻano “[[no_unique_address]]” kahi i hoʻololi ʻole ʻia ai ka ʻikepili me ka ʻole o ka ʻikepili.
Nā kuhikuhi atomika (std::atomic > a me std:: atomika >).
Hiki ke kāhea i nā hana virtual i nā ʻōlelo kūlana.
Kākoʻo no nā hana koke hiki ke hana me nā mea mau.
consteval int sqr(int n) {
hoʻi n * n;
}
constexpr int r = sqr(100); // OK
int x = 100;
int r2 = sqr(x); // ERROR: 'x' 'a'ole hiki ke ho'ohana ma ke 'ano he mau
Hiki ke hoʻohana i ka constexpr me nā hana virtual (“constexpr virtual int f() const { return 2; }”).
Ma ka waihona maʻamau:
Hoʻohui kākoʻo no ke ʻano char8_t no nā kaula UTF-8.
Hoʻohui ʻia nā faila poʻomanaʻo (bit operations) a me ka mana.
I kēia manawa hiki ke nānā i ka prefix a me ka suffix o nā kaula (starts_with, ends_with).
Hoʻohui ʻia std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible a me std::type_identity traits.
Hoʻohui ʻia nā hana std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated and std::assume_aligned.
Hoʻohui i ke kākoʻo no nā arrays i std :: make_shared.
Hoʻohui ʻia ka hana std::to_array e hoʻololi i nā mea like ʻole i std::array.
ʻOi aku ka maʻalahi o ka syntax helu helu:
papa enum rgba_color_channel { ʻulaʻula, ʻōmaʻomaʻo, uliuli, alpha};
std::nānā_kui i ke kaula(rgba_color_channel my_channel) {
hoʻololi (my_channel) {
hoʻohana i ka enum rgba_color_channel;
hihia ʻulaʻula: hoʻihoʻi "ʻulaʻula";
pahu ʻōmaʻomaʻo: hoʻihoʻi "'ōmaʻomaʻo";
pahu blue: hoʻihoʻi i "blue";
hihia alpha: hoʻihoʻi "alpha";
}
}
Ma nā papa kuhikuhi, ma muli o ke ʻano i wehewehe ʻole ʻia, ua pāpā ʻia ka hoʻohana ʻana i ka hana "," (“a[b,c]”). Ua hoʻopau ʻia ke kākoʻo no ka hapa nui o nā hana me nā ʻano like ʻole me ka huaʻōlelo volatile, me nā hana "++" a me "—" me nā ʻano maʻamau.
Hoʻemi ʻia ka helu o nā kūlana i koi ʻia ai ka "typename" e hōʻike i ke ʻano o kahi ʻano.