๋‚˜ ํด๋ž˜์‹ C++ ๊ฐœ๋ฐœ์ž์ด๊ณ  C++ ์† ๋†“์€์ง€ 10๋…„์ด ๋„˜์—ˆ์Œ...


์–ธ๋ฆฌ์–ผ ์—”์ง„์œผ๋กœ ๊ฐˆ์•„ํƒˆ๊นŒ ํ•ด์„œ ๋ชจ๋˜ C++ 17 ๋ฒ„์ „ ์ŠคํŽ™ ๋ดค์Œ.



  1. <string_view>ย ์ •์ ์ธ ๋ฌธ์ž์—ด ํด๋ž˜์Šค
  2. <optional>ย ์ „๋‹ฌํ•˜๋Š” ๊ฐ’์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค
  3. <filesystem>ย ํŒŒ์ผ ์‹œ์Šคํ…œ ์ง€์›
  4. <execution>ย ๋ณ‘๋ ฌย STLย ์•Œ๊ณ ๋ฆฌ์ฆ˜
  5. <variant>ย ํƒ€์ž… ์•ˆ์ „ํ•œ ๊ฒฐํ•ฉ์ฒด (union)
  6. ํ…œํ”Œ๋ฆฟ ์ธ์ž ์ถ”๋ก 
    template<typename T> class Aaa {}; template<typename T> Aaa(T) -> Aaa<T>;์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ํ…œํ”Œ๋ฆฟ์˜ ์ถ”๋ก  ๋ฐฉ๋ฒ•์„ ์ง์ ‘ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Œ. ๊ฐ€๋ นย std::vector v{1, 2, 3};์˜ ๊ฒฝ์šฐ v๋Š”ย std::vector<int>๋กœ ์—ฐ์—ญ๋จ.
  7. ๊ตฌ์กฐ์  ๋ฐ”์ธ๋”ฉ: ํŠœํ”Œ ๋˜๋Š” ์ง‘ํ•ฉ ๊ตฌ์กฐ์ฒด๋ฅผ ํ’€์–ด์“ฐ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ. ๊ฐ€๋ นย auto [a, b, c] = std::tuple(4, 5, 6);์—์„œย a๋Š” 4,ย b๋Š” 5,ย c๋Š” 6์ด ๋จ
  8. ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ์ž์— ๋ฐ”๋กœ ๊ฐ™์€ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ–ˆ์„๋•Œ, ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ด๋™ ์ƒ์„ฑ์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉดย ์ˆœ์ˆ˜ํ•œ R-Value๊ฐ€ ๋˜์–ด ๋งˆ์น˜ ์กด์žฌํ•˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ๋จ. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋™ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋Š” ํด๋ž˜์Šค A๋ฅผ ์ƒ์„ฑํ•  ๋•Œย A aaa{A{}};์—์„œ ์•ˆ์ชฝ์˜ย A{}๋Š” ์ฝ”๋“œ ์ƒ์—๋งŒ ๋ณด์ด๊ณ  ์‹คํ–‰ ์‹œ์ ์—๋Š” ๋ณด์ด์ง€ ์•Š๋Š” ์กด์žฌ๊ฐ€ ๋จ
  9. noexceptย ์†์„ฑ์ด ํ•จ์ˆ˜์˜ ์ž๋ฃŒํ˜•์— ํฌํ•จ๋จ. ํ•จ์ˆ˜ ํฌ์ธํ„ฐ, ๋žŒ๋‹ค ํ‘œํ˜„์‹, ํ•จ์ž ๊ฐ์ฒด์—์„œย noexcept๋ฅผ ๋ช…์‹œํ•œ ๊ฒƒ๊ณผ ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ์ทจ๊ธ‰๋จ
  10. ๋žŒ๋‹ค ํ‘œํ˜„์‹์˜ ๋ฌธ๋งฅ ์บก์ฒ˜ ๋ถ€๋ถ„์—ย this๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ. ์ด๋ฅผ ํ†ตํ•ด ์ž์‹ ์˜ ๋ฉ”์„œ๋“œ, ํ•„๋“œ๋งŒ ์บก์ฒ˜ํ•  ์ˆ˜๋„ ์žˆ์Œ
  11. constexprย ๋žŒ๋‹ค ํ‘œํ˜„์‹
  12. if constexprย if๋ฌธ๊ณผ ์‚ฌ์šฉ๋ฒ•์€ ๊ฐ™์ง€๋งŒ, ํ‰๊ฐ€๋˜๊ณ  ์‹คํ–‰๋˜๋Š” ๋‚ด์šฉ์€ ์ปดํŒŒ์ผ ์‹œ์ ์— ์ฆ‰์‹œ ๊ฒฐ์ •๋จ. ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์ชฝ์€ ์•„์˜ˆ ์ฝ”๋“œ์—์„œ ์ œ๊ฑฐ๋จ. ์ด๋ฅผ ์ด์šฉํ•ด ์˜ค๋ฒ„๋กœ๋”ฉ ์—†์ด ์™„์ „ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
  13. inline์„ ๋ณ€์ˆ˜ ์„ ์–ธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.ย static inlineย ํ•„๋“œ๋Š” ์„ ์–ธ ์ฆ‰์‹œ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Œ. ์–ด๋–ค ์ด๋ฆ„๊ณต๊ฐ„ ์•ˆ์— ์žˆ๋Š”ย inline constexprย ๋ณ€์ˆ˜๋Š”ย staticย ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์ค‘๋ณต ์„ ์–ธ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์œผ๋ฉฐ ํ•ญ์ƒ ๋‹จ์ผํ•˜๊ฒŒ ์กด์žฌํ•˜๋Š” ์ด๋ฆ„์ด ๋จ. ํ…œํ”Œ๋ฆฟย inline constexprย ๋ณ€์ˆ˜๋Š” ๋Šฆ๊ฒŒ ํ‰๊ฐ€๋˜๋ฉฐ ์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ๋Œ€์ž…๋จ. ๊ทธ๋ฆฌ๊ณ ย static constexpr์˜ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœย static inline constexpr๋กœ ์—ฐ์—ญ๋จ
  14. ์ค‘์ฒฉ๋˜๋Š” ์ด๋ฆ„๊ณต๊ฐ„์„ย namespace ns1::ns2 { ...;ย }์™€ ๊ฐ™์ด ๋ฐ”๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Œ
  15. ์ด๋ฆ„์—†๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง. ํ•จ์ˆ˜์—ย std::in_place,ย std::in_place_type<T>ย ๊ฐ™์€ ๋ฉ”ํƒ€ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์œ ์šฉํ•จ
  16. Enum en{ value };๊ณผ ๊ฐ™์ด ์—ด๊ฑฐํ˜•์˜ ์ƒ์„ฑ, ๋Œ€์ž…์„ ํ˜•๋ณ€ํ™˜ ์—†์ด ๋ฐ”๋กœ ํ•  ์ˆ˜ ์žˆ์Œ. ์ด๋Š”ย enum class์—๋„ ์ ์šฉ๋จ
    1. enum class std::byte
  17. ๋ฒˆ๊ฑฐ๋กญ๊ฒŒย alignas๋ฅผ ํด๋ž˜์Šค์— ๋ถ™์ผ ํ•„์š” ์—†์ดย std::aligned_alloc๋กœ ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ •๋ ฌ๊ณผ ๋™์‹œ์— ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ด์ง
  18. constexpr std::array
  19. ์ƒˆ๋กœ์šด ํŠน์„ฑย [[fallthrough]]
  20. ์ƒˆ๋กœ์šด ํŠน์„ฑย [[maybe_unused]]
  21. ์ƒˆ๋กœ์šด ํŠน์„ฑย [[nodiscard]],ย [[nodiscard(message)]]
*์ถœ์ฒ˜: ๊บผ๋ผ์œ„ํ‚ค


๋ญ ์š”์ฆ˜ ์œ ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค ํŠน์ง• ์ž˜ ๊ฐ€์ ธ์˜ค๊ธด ํ–ˆ๋Š”๋ฐ.... ๊ทธ๋ƒฅ ์‹œ๋ฐœ ๋„ˆ๋ฌด ๋ˆˆ์•„ํ”„๋‹ค.


์•„... ์ ‘์žใ…‹