C++11
TÖRTÉNETI ÁTTEKINTŐ Bjarne Stroustrup, AT&T 1979 C with classes 1983 ipari alkalmazás 1998 első szabvány 2003 apróbb módosítások 2005 tr új irány
C++ RENESZÁNSZA 1990 – alacsony szintű nyelvek 2000 – erős hardverek, produktivitás 2010 – szerverfarmok, mobil eszközök
C++ ÉRTÉKEI C kompatibilitás Alacsony és magas szint Multi-paradigm programozási nyelv Absztrakciós lehetőségek (olcsón) Minden opcionális Multi-platform
C++11 ELŐTÖRTÉNET Szinte változatlan a szabvány 1998 óta Elterjedt megoldások Hiányos standard könyvtárak STL – copy TR1, Boost C++0x Szabványosítás előnyei
ÚJ SZABVÁNY SZEMPONTRENDSZERE Kompatibilitás Stílus Biztonság Sebesség Tanulhatóság Kényelem, hatékonyság
AZ ÚJ SZABVÁNY TARTALMA Inicializátor listák Range based loop Lambda függvények Saját konstans literálok Variadic templates Move szemantika Threads Regexp Chrono, Random Új STL containerek Static assertions Smart pointers Függvény objektumok Override, final nullptr konstans Új string konstansok, ustring Enum „osztályok” És még sok más…
AZ ÚJ SZABVÁNY TARTALMA vector vec = load_foo(); for(vector ::iterator it=vec.begin(); it != vec.end(); ++it) { (*it)->do_something(); } for(vector ::iterator it=vec.begin(); it != vec.end(); ++it) { delete *it; } vector > vec = load_foo(); for(auto i: vec) { i->do_something(); }
AZ ÚJ SZABVÁNY TARTALMA std::vector v = {5, 4, 3, 3, 4, 5, 1, 8, 9}; //std::initializer_list std::sort (begin(v), end(v), [](int a, int b){ return a%4 < b%4; }); for (int i: {1,5,7,3,2}) std::cout << i << " "; int i{3};
AZ ÚJ SZABVÁNY TARTALMA constexpr complex operator "" i(long double d) { return {0,d}; } auto z = 2+1i;// complex(2,1) string s = R"(\w\\\w)";
AZ ÚJ SZABVÁNY TARTALMA template void printf(const char* s, T value, Args... args) { while (s && *s) { if (*s=='%' && *++s!='%') { std::cout << value; return printf(++s, args...); } std::cout << *s++; }
AZ ÚJ SZABVÁNY TARTALMA class button; class window { shared_ptr btn = nullptr; }; class button { weak_ptr wnd; };
AZ ÚJ SZABVÁNY TARTALMA template class vector { vector(const vector&); vector(vector&&); vector& operator=(const vector&); vector& operator=(vector&&); }; foo = std::move(bar);
AZ ÚJ SZABVÁNY TARTALMA class X { int a[] = {1, 4, 5, 6, 7}; public: X(int x) { if (0<x && x<=max) a=x; else throw bad_X(x); } X() : X{42} {} X& operator=(const X&) = delete; X(const X&) = default; };
AZ ÚJ SZABVÁNY TARTALMA tuple t{"Foo", 42, }; string bar{get (t)}; auto t = make_touple("foo", , 42); array a = { 5, 2, 1}; a[3]=4; unordered_map um { { "Dijkstra", 1972 }, { "Scott", 1976 }, { "Wilkes", 1967 }, { "Hamming", 1968 } };
AZ ÚJ SZABVÁNY TARTALMA { enum class Color : char { red, blue }; Color a = Color::blue; } Color b = Color::red; //Hiba extern template class Foo ;
AZ ÚJ SZABVÁNY TARTALMA ifstream in("Be.txt"s); template auto multiply(T x, U y) -> decltype(x*y) { return x*y; } auto add = [](int a, int b)->int { return a+b };
AZ ÚJ SZABVÁNY TARTALMA auto func = std::bind(foobar,_2,_1,10); func(66,12); // foobar(12, 66, 10) // Új típusok char16_t a; char32_t b; long long c; u"String"; u8"string"; L"string"; U"string";
AZ ÚJ SZABVÁNY TARTALMA constexpr int add(int x, int y) { return x + y; } const int value = add(2, 9); static_assert(add(1, 8) == 9,„Error!");
VÁLTOZÁS A KÓDOLÁSI STÍLUSBAN Rövidebb, jobban olvasható kód Kevesebb hibalehetőség Gyorsabb program Kevesebb külső függvénykönyvtár "C++11 feels like a new language” – Bjarne Stroustrup
A SZABVÁNY JÖVŐJE Megvalósíthatóság Portolás Támogatás ( -std=C++11 vagy –std=C++0x ) C11 GCC, CLANG, MSVC C++1y
Standrad Library bővítés File system, unicode, network, date Pontosítások, pure keyword, static_if Concepts, GC, Reflection Tudomány Mátrix, Fizikai egységek, Újabb matematikai függvények Magas szintű könyvtárak: XML, GUI, 3D, Adatbázis
KONFERENCIÁK Going Native C++ Now! (BoostCon) C++ and Beyond Lang.Next BUILD2011 Folly / Casablanca ( Függvénykönyvtárak )
REFERENCIÁK port