C++ ์ธ์ด ํ์คํ์ ๊ดํ ISO ์์ํ
๋ค์ 14882๊ฐ์ ๋์ ์น์ธ๋ ์ฌ์์ ์ถํ์ ์ํ ๋ฌธ์ ์ค๋น ๋จ๊ณ์ ์์ ๊ฒ์ด๋ฉฐ, ์ด ๋จ๊ณ์์ ์ฒ ์ ์ค๋ฅ ๋ฐ ์คํ์ ๋ํ ํธ์ง ์์ ์์
์ด ์ํ๋ ๊ฒ์
๋๋ค. 2020์ ์ด์ ์ต์ข
๋ฌธ์๋ ISO/IEC 23:2์ด๋ผ๋ ๊ณต์ ์ด๋ฆ์ผ๋ก ๋ฐํ๋๊ธฐ ์ํด ISO๋ก ์ ์ก๋ฉ๋๋ค. ๊ทธ ๋์ ์์ํ๋ ์ด๋ฏธ ๋ค์ C++XNUMX ํ์ค(C++XNUMXb)์ ๋ํ ์์
์ ์์ํ์ผ๋ฉฐ ๋ค์ ๊ฐ์ ํ์์์ ๊ฐ๋ฅํ ์ต์
์ ๊ณ ๋ คํ ๊ฒ์
๋๋ค.
- ์ปดํ์ผ ํ์์ ํ
ํ๋ฆฟ ๋งค๊ฐ๋ณ์๋ก ํ์ฉ๋ ์ ์๋ ์ธ์ ์งํฉ์ ์ ํํ๋ ํ
ํ๋ฆฟ ๋งค๊ฐ๋ณ์ ์๊ตฌ ์ฌํญ ์งํฉ์ ์ ์ํ ์ ์๋ ํ
ํ๋ฆฟ ํ์ฅ์ธ "๊ฐ๋
"์ด ์ถ๊ฐ๋์์ต๋๋ค. ๊ฐ๋
์ ํ
ํ๋ฆฟ ๋ด์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ์ ํ์ ์์ฑ๊ณผ ์
๋ ฅ ๋งค๊ฐ๋ณ์์ ๋ฐ์ดํฐ ์ ํ ์์ฑ ๊ฐ์ ๋
ผ๋ฆฌ์ ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
์ฃผํ
๊ฐ๋ EqualityComparable = ์๊ตฌ(T a, T b) {
{ a == b } -> std::boolean;
{ a != b } -> std::boolean;
}; - ์๋ฝ๋จ
ํ์ฅ ํค๋ ํ์ผ ๋์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ชจ๋์ "#include"๋ฅผ ํตํด ํค๋ ํ์ผ์ ํฌํจํ์ง ์๊ณ ๊ตฌ์ฑ ์์์ ๊ฒฝ๊ณ ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ค ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. - ๋ณ์ ์ธ์์ ํ ํฐ์ด ์๋์ง์ ๋ฐ๋ผ ๊ฐ๋ณ ๋งคํฌ๋ก๋ฅผ ์ ์ํ์ผ๋ก ํ์ฅํ๊ธฐ ์ํ ๋งคํฌ๋ก __VA_OPT__.
- XNUMX๋ฐฉํฅ ๋น๊ต๋ฅผ ์ํด "" ์ฐ์ฐ์๋ฅผ ์ง์ํฉ๋๋ค.
- ๋นํธ ํ๋์ ๋ํ ๊ธฐ๋ณธ ์์ ์ด๋์ ๋ผ์ด์ ๋ฅผ ์ง์ํฉ๋๋ค.
- ๋๋ค์์ "*this" ํํ์์ ์บก์ฒํ๋ ๊ธฐ๋ฅ.
๊ตฌ์กฐ์ฒด int_value {
์ ์ n = 0;
์๋ getter_fn() {
//๋์:
// return [=]() { return n; };// ์ข์:
return [=, *this]() { return n; };
}
}; - "const &" ํํ์์ ํตํด ์ ์๋ ์์ ๊ฐ์ฒด์ ๋ํ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํฌ์ธํฐ(๋ฉค๋ฒ์ ๋ํ ํฌ์ธํฐ)๋ก ์์๋ฅผ ํธ์ถํฉ๋๋ค.
- ๋ฌธ์์ ์ค๋ช
๋ ์๋ฉธ์๊ฐ ์๋ ์ญ์ ์ฐ์ฐ์
P0722R1 . - ํด๋์ค๋ ์ ํ ์์ด ํ
ํ๋ฆฟ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ตฌ์กฐ์ฒด foo {
foo() = ๊ธฐ๋ณธ๊ฐ;
constexpr foo(int) {}
};์ฃผํ
์๋ get_foo() {
f๋ฅผ ๋ฐํ;
}get_foo(); // ์์์ ์์ฑ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
get_foo (); - ์์ฑ์๊ฐ ์๋ ๋น์ง์์ ๋๋ค ์์ ๋๋ค.
- ๋๋ค ํํ์์ ๋ํ ํ ํ๋ฆฟ ๊ตฌ๋ฌธ ํ์ฉ("auto f = [] (ํ์ค::๋ฒกํฐ V)").
- ํ ํ๋ฆฟ ๋งค๊ฐ๋ณ์์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ.
- C ์คํ์ผ ์ด๊ธฐํ ๊ตฌ๋ฌธ ์ง์ - ์ด๊ธฐํ ๋ชฉ๋ก์ ๋ช
์์ ์ผ๋ก ๋์ด๋์ง ์์ ํ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
๊ตฌ์กฐ์ฒด A {
int x;
์ ์ Y;
์ ์ z = 123;
};A a {.x = 1, .z = 2}; // ax == 1, ay == 0, az == 2
- ๋น ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฉค๋ฒ๋ฅผ ์ง์ํฉ๋๋ค.
- ์กฐ๊ฑด๋ถ ๊ตฌ๋ฌธ์ด ํธ๋ฆฌ๊ฑฐ๋ ํ๋ฅ ์ ๋ํด ์ต์ ํ ํ๋ก๊ทธ๋จ์ ์๋ฆฌ๋ ๊ฐ๋ฅ์ฑ ๋ฐ ๊ฐ๋ฅ์ฑ ์์ ์์ฑ ์ง์("[[likely]] if (random > 0) {").
- ๋ฒ์๋ฅผ ์ฌ์ฉํ์ฌ "for" ๋ฃจํ์์ ๋ณ์ ๊ฐ์ ์ด๊ธฐํํ๋ ๊ธฐ๋ฅ
for (auto v = std::๋ฒกํฐ{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 virtual int f() const { return 2; }")์ ํจ๊ป constexpr์ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ.
- ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์:
- UTF-8 ๋ฌธ์์ด์ ๋ํ char8_t ์ ํ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ํค๋ ํ์ผ ๋นํธ(๋นํธ ์ฐ์ฐ) ๋ฐ ๋ฒ์ ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ด์ ๋ฌธ์์ด์ ์ ๋์ฌ์ ์ ๋ฏธ์ฌ(starts_with, end_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 class rgba_color_channel { ๋นจ๊ฐ, ๋ น์, ํ๋, ์ํ };
std::string_view to_string(rgba_color_channel my_channel) {
์ค์์น(my_channel) {
enum rgba_color_channel ์ฌ์ฉ;
์ผ์ด์ค ๋นจ๊ฐ์: "๋นจ๊ฐ์"์ ๋ฐํํฉ๋๋ค.
๋ น์์ธ ๊ฒฝ์ฐ: "๋ น์"์ ๋ฐํํฉ๋๋ค.
ํ๋์์ ๊ฒฝ์ฐ: "ํ๋์"์ ๋ฐํํฉ๋๋ค.
์ผ์ด์ค ์ํ: "์ํ"๋ฅผ ๋ฐํํฉ๋๋ค.
}
} - ์ธ๋ฑ์ค์์๋ ์ ์๋์ง ์์ ๋์์ผ๋ก ์ธํด ","("a[b,c]") ์ฐ์ฐ์ ์ฌ์ฉ์ด ๊ธ์ง๋ฉ๋๋ค. ํ์ค ์ ํ์ "++" ๋ฐ "โ" ์์ ์ ํฌํจํ์ฌ ํ๋ฐ์ฑ ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ์์ ์ ๋ํ ์ง์์ด ์ค๋จ๋์์ต๋๋ค.
- ์ ํ์ ์กด์ฌ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด "typename"์ด ํ์ํ ์ํฉ์ ์๊ฐ ์ค์์ต๋๋ค.
์ถ์ฒ : opennet.ru