C ++ 17 හි ඇති නව විශේෂාංග මොනවාද?


1006

සී ++ 17 දැන් අංග සම්පූර්ණයි, එබැවින් විශාල වෙනස්කම් අත්විඳිය නොහැක. සී ++ 17 සඳහා සිය ගණනක් යෝජනා ඉදිරිපත් කරන ලදී.

C ++ 17 හි C ++ ට එකතු කරන ලද ලක්ෂණ මොනවාද?

"C ++ 1z" සඳහා සහය දක්වන C ++ සම්පාදකයක් භාවිතා කරන විට, C ++ 17 වෙත සම්පාදකයා යාවත්කාලීන කරන විට ලබා ගත හැකි ලක්ෂණ මොනවාද?


26
ක්ලැන්ග් අනුව අංගයන්ගේ සම්පූර්ණ ලැයිස්තුව: පුස්තකාලය , මූලික භාෂාව .
කෙරෙක් එස් බී

3
මෙම බ්ලොග් බොස්ට්හි හොඳ සාරාංශයක් ඇත: bfilipek.com/2017/01/cpp17features.html
atb

13
නිල බලන්න C ++ 14 හා C ++ 17 නිර් (P0636r0) අතර වෙනස් C ++ 14 සිට C ++ 17 ප්රධාන වෙනස්කම් ලැයිස්තුව සඳහා බලන්න.
jotik

1
Ag රාගව්නාවාඩා නියමයි! සී ++ 20 කොටස නඩත්තු කෙරේද? තියෙනවා # 53 , නමුත් එය වසා වෙනවා ...
LF

මෙම වෙබ් අඩවියේ ඇති සියල්ල en.cppreference.com/w/cpp අවශ්‍ය අනුවාදයෙන් සලකුණු කර ඇත.
jw_

Answers:


1270

භාෂා ලක්ෂණ:

ආකෘති සහ සාමාන්‍ය කේතය

ලැම්බඩා

ගුණාංග

සින්ටැක්ස් පිරිසිදු කිරීම

පිරිසිදු බහු ප්‍රතිලාභ සහ ප්‍රවාහ පාලනය

  • ව්යුහාත්මක බන්ධන

    • මූලික වශයෙන්, පළමු පන්තිය std::tieසමඟauto
    • උදාහරණයක්:
      • const auto [it, inserted] = map.insert( {"foo", bar} );
      • විචල්ය නිර්මාණය itහා insertedසිට බලවත්වූ වර්ගය සමග pairබව map::insertප්රතිලාභ.
    • ටුපල් / යුගල-කැමති සහ std::arrayසාපේක්ෂව පැතලි ව්‍යුහයන් සමඟ ක්‍රියා කරයි
    • සම්මත ලෙස ව්‍යුහගත බන්ධන නම් කර ඇත
  • if (init; condition) සහ switch (init; condition)

    • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
    • දිග් if(decl)අවස්ථා සඳහා declසිතට පරිවර්තනය-කිරීමට bool නොවේ.
  • ලූප සඳහා පරාසය පදනම් කරගත් සාමාන්‍යකරණය කිරීම

    • ආරම්භක ඉරේටරයට සමාන නොවන සෙන්ඩිනල් හෝ අවසන් ඉරේටර සඳහා වැඩි වශයෙන් සහය දක්වන බව පෙනේ, එය ශුන්‍ය-අවසන් කළ ලූප සහ වෙනත් දේ සඳහා උපකාරී වේ.
  • constexpr නම්

    • සාමාන්‍ය කේතය පාහේ සරල කිරීම සඳහා බොහෝ ඉල්ලූ අංගයකි.

විවිධ

පුස්තකාල එකතු කිරීම්:

දත්ත වර්ග

  • std::variant<Ts...>

    • අන්තිමට සෑම විටම පාහේ හිස් නොවන අවසාන වරට මා පරීක්ෂා කළාද?
    • ටැග් කරන ලද වෘත්තීය සමිති වර්ගය
    • {නියමයි | ප්‍රයෝජනවත්}
  • std::optional

    • සමහර විට යම් දෙයක් දරයි
    • හාස්‍යජනක ලෙස ප්‍රයෝජනවත් වේ
  • std::any

    • ඕනෑම දෙයකින් එකක් (එය පිටපත් කළ හැකි) දරයි
  • std::string_view

    • std::string යොමු-සිට-අක්ෂර-අරාව හෝ උපස්ථරය වැනි
    • string const&නැවත කිසි දිනෙක ගන්න එපා . විග්‍රහ කිරීම බිලියනයක වේගයකින් විග්‍රහ කළ හැකිය.
    • "hello world"sv
    • constexpr char_traits
  • std::byte ඔවුන්ට හපන්න පුළුවන් ප්‍රමාණයට වඩා.

    • පූර්ණ සංඛ්‍යාවක් හෝ අක්ෂරයක් හෝ දත්ත පමණක් නොවේ

දේවල් ආයාචනා කරන්න

  • std::invoke
    • එක් වාක්‍ය ඛණ්ඩයක් සමඟ ඕනෑම ඇමතිය හැකි (ශ්‍රිත දර්ශකය, ශ්‍රිතය, සාමාජික දර්ශකය) අමතන්න. සම්මත INVOKE සංකල්පයෙන්.
  • std::apply
    • ශ්‍රිතයක් හා ටුපල් එකක් ගෙන, ඇමතුම තුළට ටුපල් එක ඉවත් කරයි.
  • std::make_from_tuple, std::applyවස්තු ඉදිකිරීම සඳහා යොදනු ලැබේ

  • is_invocable, is_invocable_r,invoke_result

ගොනු පද්ධතිය TS v1

නව ඇල්ගොරිතම

  • for_each_n

  • reduce

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

  • නූල් දැමීමේ අරමුණු සඳහා එකතු කරන ලද අතර, ඔබ ඒවා නූල් භාවිතා නොකරන්නේ වුවද නිරාවරණය වේ

නූල් දැමීම

(කොටස්) පුස්තකාල මූලධර්ම TS v1 ඉහළින් හෝ පහළින් ආවරණය නොවේ

බහාලුම් වැඩිදියුණු කිරීම්

ස්මාර්ට් පොයින්ටරය වෙනස් වේ

වෙනත් stdදත්ත සමුදා වැඩිදියුණු කිරීම්:

විවිධ

ගති ලක්ෂණ

අතහැර දමා ඇත

C ++ 14 සිට Isocpp.org හි ස්වාධීන වෙනස්කම් ලැයිස්තුවක් ඇත; එය අර්ධ වශයෙන් කොල්ලකෑමට ලක්ව ඇත.

ස්වාභාවිකවම ටීඑස් වැඩ සමාන්තරව අඛණ්ඩව සිදු වේ, එබැවින් තරමක් ඉදුණු නොවන සමහර ටීඑස් ඇති අතර ඊළඟ ක්‍රියාවලිය සඳහා බලා සිටීමට සිදුවනු ඇත. මීළඟ පුනරාවර්තනය සඳහා ඉලක්කය කලින් සැලසුම් කළ පරිදි C ++ 20 මිස සමහර කටකතා වලින් ඇඟවෙන පරිදි C ++ 19 නොවේ. C ++ 1O වළක්වා ඇත.

සිට ගෙන මූලික ලැයිස්තුව මෙම Reddit පශ්චාත් සහ මෙම Reddit පශ්චාත් හෆීස් හරහා හෝ ඉහත isocpp.org පිටුව එක් සබැඳි සමග.

SD-6 විශේෂාංග-පරීක්ෂණ ලැයිස්තුවෙන් කොල්ලකන ලද අතිරේක ඇතුළත් කිරීම් .

කොල්ලයේ විශේෂාංග ලැයිස්තුව සහ පුස්තකාල විශේෂාංග ලැයිස්තුව කොල්ලකෑමට ඊළඟට ඇත. මෙය විශ්වාසදායක බවක් නොපෙනේ, එය C ++ 1z මිස C ++ 17 නොවේ.

මෙම විනිවිදකවල වෙනත් තැන්වල සමහර අංග අතුරුදහන් විය.

"ඉවත් කළ දේ" විමසා නොතිබුණද, C ++ 17 සිට C ++ වෙතින් ඉවත් කරන ලද ((බොහෝ දුරට?) කලින් ඉවත් කරන ලද) කරුණු කිහිපයක කෙටි ලැයිස්තුවක් මෙහි ඇත:

ඉවත් කරන ලදි:

නැවත කියවීම් තිබුණා. මේවා කේතයට කිසියම් බලපෑමක් ඇති කරන්නේද, නැතහොත් ඒවා ප්‍රමිතියෙන් පිරිසිදු කිරීමක්ද යන්න මට විශ්වාස නැත:

ඉහත දක්වා ඇති ලිපි ලේඛන තවමත් ඒකාබද්ධ කර නොමැත:

  • P0505R0 (constexpr chrono)

  • P0418R2 (පරමාණුක tweaks)

  • P0512R0 (අච්චු තර්ක අඩුකිරීම් tweaks)

  • P0490R0 (ව්‍යුහගත බන්ධන වෙනස් කිරීම්)

  • P0513R0 (වෙනස් කිරීම std::hash)

  • P0502R0 (සමාන්තර ව්‍යතිරේක)

  • P0509R1 (ව්‍යතිරේක හැසිරවීමේ සීමාවන් යාවත්කාලීන කිරීම)

  • P0012R1 (ව්‍යතිරේක පිරිවිතර වර්ග පද්ධතියේ කොටසක් බවට පත් කරන්න)

  • P0510R0 (ප්‍රභේද සඳහා සීමාවන්)

  • P0504R0 (විකල්ප / ප්‍රභේද / ඕනෑම සඳහා ටැග්)

  • P0497R0 (හවුල් ptr tweaks)

  • P0508R0 (ව්‍යුහගත බන්ධන නෝඩ් හැන්ඩ්ල්ස්)

  • P0521R0 (හවුල් දර්ශක භාවිත ගණන සහ අද්විතීය වෙනස්කම්?)

පිරිවිතර වෙනස්කම්:

වැඩිදුර සඳහන:


2
ම්ම්, memory_order_consumeනිල වශයෙන් අතහැර දැමූ බවක් නොපෙනේ. එය සටහනේ අධෛර්යමත් කර ඇත. සමහර විට මෙය සඳහන් කිරීම අර්ථවත් කරයි (උදාහරණයක් ලෙස පසුපස වරහන් සමඟ)?
එල්එෆ්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.