Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilAndrea Soukupová
1
C++0x stručný náhled na nadcházející revizi standardu programovacího jazyka C++ (ISO/IEC 14882) Jan Ringoš
2
Souhrn Stručná historie C++ Standardizace C++ Nové prostředky C++0x Prostor pro dotazy
3
C++ Historie: ALGOL CPL BCPL B C 1978 - 1985 - Bjarne Stroustup 1998 – ISO/IEC 14882 (STL) 2003 – Technical corrigendum 2005 – Technical Report 1 200x – C++0x
4
Standardizace C++ WG21 Zpětná kompatibilita Stabilita jazyka Standardizace –Zdlouhavá, byrokratická –Ale ovlivní ~3 milióny
5
Standardizace C++0x Zdokonalení jazyka –wish-listy, nelze začlenit ani všechny dobré Změna způsobu myšlení –co je dobrý program? –méně řádků, paměti a cpu Přímější vyjádření problémů –Logičtější sémantika/syntaxe –Beze ztráty efektivity
6
Prostředky jazyka Initializer lists Auto (decltype) R-Value Reference λ functors Constant expressions Concepts Variadic Templates
7
Jednotná inicializace type {b} // vždy inicializace type a{b}; // type a(b); type a = {b}; type a = type{b}; type * a = new type{b}; struct pt { double xyz [3]; pt() : xyz { 1.2, 3.4, 5.6 } {}; };
8
Inicializer lists std::initializer_list ; …alá std::type_info Adaptace napříč std kontejnery std::vector v = {1,2,3}; /* v.push_back (1); v.push_back (2); v.push_back (3); */
9
Auto (decltype) Změna významu klíčového slova Kompilátor zná typ auto i = 0; // int auto i = 1.0f; // float auto a = facility ::func(); // facility ::func_ret_type decltype(…)
10
Auto funkce Automatický návratový typ auto func(int i) -> double; template auto sum (T1 a, T2 b) -> decltype (a + b) { return a + b; };
11
R-Value reference Nynější reference: L-Value Reference na dočasné objekty a = (b + c); struct S { S& operator = (const S &); S& operator = (S &&); }; std::move / static_cast
12
Lambda funktory Anonymní objekty Volání v místě zápisu int min = 3; int max = 7; std::find_if (data.begin (), data.end (), [=](const int & e) { return e>=min && e<=max; });
13
Constexpr Co je konstantní výraz? int pole [n]; const int C::c = 4; const int a = 3 * C::c; const int b = func (); const int n = INT_MAX; const int m = numeric_limits ::max ();
14
Constexpr constexpr int n = 7; constexpr int cb (int x) { return x * x * x; }; constexpr int abs (int x) { return x < 0 ? -x : x; }; constexpr int i = cb(abs(-3));
15
Koncepty Typový systém pro šablony Vyjadřuje požadavky na typ Compile-time kontrola a lepší chybová hlášení concept requires concept_map
16
Koncepty auto concept LessThanCmp { bool operator < (T, T); }; template requires LessThanCmp void sort (…) { /* … */ };
17
Template alias Moderní nahrazení typedef Zjednodušení parametrů šablon using fptr_t = void (*)(int); template using my_vector = std::vector >;
18
Variadic templates Proměnný počet parametrů std::tuple, typelisty,... template struct count { static const int n = 1 + count ::n; }; template <> struct count <> { static const int n = 0; };
19
Konkurentní programy Běh programu ve více vláknech Concurrency memory model –omezení dosahu optimalizací std::thread a std::mutex Knihovna atomických typů std::exception_ptr –propagace výjimek mezi vlákny
20
Prostředky knihovny TR1, volitelné v C++98, součástí std knihovny C++0x std::array, std::tuple std::shared_ptr std::ref std::unordered_map/set std::regex std::random
21
Další Delegace konstruktorů explicit operator T (); –doplněk k explicitním konstruktorům for (int & i : sequence); static_assert (b, "error"); friend T; // typename T const char16_t * = u " string " ; const char32_t * = U " string " ;
22
...a další Linkage pro lokální třídy enum class : int { /* … */ }; >> long alignof / alignas nullptr a std::nullptr_t [[attributy]] sizeof (C::subtype);
23
Pokračování na GDP (v hospodě) www.open-std.org/jtc1/sc22/wg21/ (google „WG21“) Děkuji za pozornost Jan Ringoš www.ringos.cz
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.