Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

C++0x stručný náhled na nadcházející revizi standardu programovacího jazyka C++ (ISO/IEC 14882) Jan Ringoš.

Podobné prezentace


Prezentace na téma: "C++0x stručný náhled na nadcházející revizi standardu programovacího jazyka C++ (ISO/IEC 14882) Jan Ringoš."— Transkript prezentace:

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


Stáhnout ppt "C++0x stručný náhled na nadcházející revizi standardu programovacího jazyka C++ (ISO/IEC 14882) Jan Ringoš."

Podobné prezentace


Reklamy Google