C ++ 17 में नई सुविधाएँ क्या हैं?


1007

C ++ 17 अब पूर्ण हो गया है, इसलिए बड़े परिवर्तनों का अनुभव करने की संभावना नहीं है। C ++ 17 के लिए सैकड़ों प्रस्तावों को सामने रखा गया।

C ++ 17 में C ++ में कौन सी विशेषताएँ जोड़ी गईं?

C ++ संकलक का उपयोग करते समय "C ++ 1z" का समर्थन करने पर, संकलक C ++ 17 में अद्यतन होने पर कौन सी सुविधाएँ उपलब्ध होने वाली हैं?


26
क्लैंग के अनुसार सुविधाओं की पूरी सूची: पुस्तकालय , मूल भाषा
केरेक एसबी

3
इस ब्लॉग पोस्ट का एक अच्छा सारांश है: bfilipek.com/2017/01/cpp17features.html
atb

13
C ++ 14 और C ++ 17 से प्रमुख परिवर्तनों की सूची के लिए C ++ 14 और C ++ 17 DIS (P0636r0) दस्तावेज़ के बीच आधिकारिक परिवर्तन देखें ।
jotik

1
@ राघवनावदा महान! क्या C ++ 20 अनुभाग को बनाए रखा जा रहा है? नहीं है # 53 है, लेकिन यह बंद है ...
वामो

इस साइट में सब कुछ en.cppreference.com/w/cpp आवश्यक संस्करण के साथ चिह्नित है।
jw_

जवाबों:


1266

भाषा सुविधाएं:

टेम्प्लेट और जेनेरिक कोड

लैम्ब्डा

गुण

सिंटेक्स क्लीनअप

क्लीनर बहु-वापसी और प्रवाह नियंत्रण

  • संरचित बाइंडिंग

    • मूल रूप से, प्रथम श्रेणी के std::tieसाथauto
    • उदाहरण:
      • const auto [it, inserted] = map.insert( {"foo", bar} );
      • वैरिएबल बनाता है itऔर उस रिटर्न insertedसे घटाए गए प्रकार के साथ ।pairmap::insert
    • टपल / जोड़ी-पसंद और std::arrayएस और अपेक्षाकृत फ्लैट संरचनाओं के साथ काम करता है
    • वास्तव में मानक में संरचित बाइंडिंग नामित
  • if (init; condition) तथा switch (init; condition)

    • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
    • if(decl)उन मामलों तक फैली हुई है जहां declसमझदारी से बूल-टू-बूल नहीं है।
  • छोरों के लिए सामान्यीकरण रेंज-आधारित

    • ज्यादातर प्रहरी के लिए समर्थन करने की अपील करता है, या पुनरावृत्तियों को समाप्त करने के लिए एक ही प्रकार नहीं है जो कि पुनरावृत्तियां शुरू करते हैं, जो अशक्त-समाप्त छोरों और इस तरह से मदद करता है।
  • अगर बाधा

    • बहुत अनुरोध वाली सुविधा लगभग-सामान्य कोड को सरल बनाने के लिए।

विविध

पुस्तकालय परिवर्धन:

जानकारी का प्रकार

  • 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

  • सूत्रण प्रयोजनों के लिए जोड़ा गया, भले ही आप उन्हें थ्रेडेड का उपयोग नहीं कर रहे हैं

थ्रेडिंग

  • std::shared_mutex

    • यदि आपको इसकी आवश्यकता नहीं है, तो अप्रयुक्त, जो अधिक कुशल हो सकता है।
  • atomic<T>::is_always_lockfree

  • scoped_lock<Mutexes...>

    • std::lockएक बार में एक से अधिक म्यूटेक्स को लॉक करने पर कुछ दर्द से बचाता है ।
  • समानांतरवाद TS v1

    • 2014 से लिंक किया हुआ पेपर पुराना हो सकता है
    • stdएल्गोरिदम और संबंधित मशीनरी के समानांतर संस्करण
  • हार्डवेयर _ * _ interference_size

(पुर्जों के पुर्जे) फंडामेंटल टीएस v1 को ऊपर या नीचे कवर नहीं किया जाता

कंटेनर में सुधार

स्मार्ट पॉइंटर बदल जाता है

अन्य stdडेटा प्रारूप में सुधार:

विविध

लक्षण

पदावनत

Isocpp.org में C ++ 14 के बाद से परिवर्तनों की एक स्वतंत्र सूची है; यह आंशिक रूप से स्तंभित किया गया है।

स्वाभाविक रूप से टीएस का काम समानांतर रूप से जारी है, इसलिए कुछ टीएस ऐसे नहीं हैं, जो बहुत अधिक परिपक्व नहीं हैं, जिन्हें अगले पुनरावृत्ति के लिए इंतजार करना होगा। अगले पुनरावृत्ति का लक्ष्य C ++ 20 है जैसा कि पहले नियोजित था, C ++ 19 जैसा कि कुछ अफवाहें निहित नहीं हैं। C ++ 1O को टाला गया है।

इस रेडिट पोस्ट से ली गई प्रारंभिक सूची और इस reddit पोस्ट , लिंक के साथ googling के माध्यम से या उपरोक्त isocpp.org पेज से जोड़ा गया है।

से अतिरिक्त प्रविष्टियाँ दर्ज की गईं SD-6 सुविधा-परीक्षण सूची ।

क्लैंग की फीचर सूची और लाइब्रेरी फ़ीचर लिस्ट को अगले चरण में रखा गया है। यह विश्वसनीय नहीं लगता, क्योंकि यह C ++ 1z है, C ++ 17 नहीं।

ये स्लाइड में कुछ विशेषताएं कहीं और गायब थीं।

जबकि "जो हटा दिया गया था" नहीं पूछा गया था, यहां कुछ चीजों की एक छोटी सूची है ((ज्यादातर?) पिछले पदावनत) जिन्हें C ++ से C ++ 17 में हटा दिया गया है:

हटा दिया:

रेवड़ियाँ थीं। मैं अनिश्चित हूँ कि इनका कोड पर कोई प्रभाव पड़ता है, या यदि ये मानक में केवल क्लीनअप हैं:

पत्रों को अभी तक ऊपर में एकीकृत नहीं किया गया है:

  • P0505R0 (कॉन्स्ट्रेक्स क्रोनो)

  • P0418R2 (परमाणु मोड़ )

  • P0512R0 (टेम्प्लेट लॉजिक डिडक्शन ट्वीक्स )

  • P0490R0 (संरचित बाइंडिंग ट्विक्स )

  • P0513R0 (परिवर्तन std::hash)

  • P0502R0 (समानांतर अपवाद)

  • P0509R1 (अपवाद हैंडलिंग पर प्रतिबंध अद्यतन)

  • P0012R1 (अपवाद विनिर्देशों प्रकार प्रणाली का हिस्सा हो)

  • P0510R0 (वेरिएंट पर प्रतिबंध)

  • P0504R0 (वैकल्पिक / संस्करण / किसी के लिए टैग)

  • P0497R0 (साझा ptr tweaks)

  • P0508R0 (संरचित बाइंडिंग नोड हैंडल)

  • P0521R0 (साझा सूचक गणना और अद्वितीय परिवर्तनों का उपयोग करता है?)

विशिष्ट परिवर्तन:

आगे संदर्भ:


2
उम, memory_order_consumeआधिकारिक तौर पर पदावनत नहीं लगता है। यह सिर्फ नोट में हतोत्साहित किया गया है। शायद यह उल्लेख करने के लिए समझ में आता है (उदाहरण के लिए, एक अनुगामी कोष्ठक के साथ)?
LF
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.