Standard C++0x (C++1x?) Marcin Świderski

Podobne dokumenty
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Wprowadzenie do szablonów klas

Szablony funkcji i szablony klas

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

6 Niektóre nowe cechy standardu C++11

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Algorytmy i Struktury Danych. Anna Paszyńska

Programowanie 2. Język C++. Wykład 3.

PROGRAMOWANIE GENERYCZNE W JĘZYKU C++

Część 4 życie programu

Projektowanie klas c.d. Projektowanie klas przykład

Zaawansowane programowanie w C++ (PCP)

C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue

Szablony. Szablony funkcji

Signals + Threads: Qt vs. Boost

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

ROZDZIAŁ 2. Operatory

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Paradygmaty programowania. Paradygmaty programowania

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Wykład 4: Klasy i Metody

Programowanie obiektowe

Robert Kawulak C++09. Co nowego w nadchodzącym standardzie języka?

Programowanie obiektowe C++

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Wstęp do programowania 1

Materiały. Języki programowania II (Java+AVR-GCC) Literatura

STL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. multimap. Kontener map: przykład zadanie:

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

PROGRAMOWANIE w C prolog

Paradygmaty programowania

Szablony klas, zastosowanie szablonów w programach

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

obiekty funkcyjne - funktory

Zaawansowane programowanie w C++ (PCP)

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Cena szkolenia. Opis kursu

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

Nowoczesny C++ Rafał Wasilewski 1

Stos liczb całkowitych

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Język ludzki kod maszynowy

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Szablon klasy std::vector

Operatory na rzecz typu TString

Wstęp do Programowania 2

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie i struktury danych

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Programowanie obiektowe w C++ Wykład 12

SWIFT. Zaawansowane Programowanie Obiektowe

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Programowanie w języku C++

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Języki i metody programowania Java. Wykład 2 (część 2)

Microsoft IT Academy kurs programowania

Wykład 1

Kurs programowania. Wykład 9. Wojciech Macyna

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język C - podstawowe informacje

Szablony funkcji i klas (templates)

C++ 11: C++ 11: C++11: jednolita inicjalizacja. C++11: jednolita inicjalizacja. C++11: jednolita inicjalizacja. C++11: initializer_list

Słowa kluczowe i nazwy

Języki programowania - podstawy

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

I - Microsoft Visual Studio C++

Technologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz.

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

JAVA W SUPER EXPRESOWEJ PIGUŁCE

C++ Przeładowanie operatorów i wzorce w klasach

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

PARADYGMATY PROGRAMOWANIA Wykład 3

Języki i techniki programowania Ćwiczenia 2

STL: kontenery C++: STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Fabryka obiektów. Fabryka obiektów

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Zaawansowane programowanie w C++ (PCP)

Curiously recurring template pattern

Wykład 5: Klasy cz. 3

Programowanie obiektowe i C++ dla matematyków

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Programowanie Proceduralne

Transkrypt:

Standard C++0x (C++1x?) Marcin Świderski sfider@students.mimuw.edu.pl

O czym będzie mowa? Wytyczne komitetu standaryzacyjnego Rozszerzenia języka Rozszerzenia języka szablony Rozszerzenia biblioteki standardowej

Wytyczne komitetu standaryzacyjnego Zachować stabilność oraz zgodność wstecz Dodawać nowe funkcjonalności poprzez bibliotekę standardową, a nie rozbudowę języka Dodawać funkcjonalności rozwijające technikę programowania Skupić się na usprawnieniu projektowania systemów oraz bibliotek

Wytyczne komitetu standaryzacyjnego c.d. Zwiększyć bezpieczeństwo typologiczne Poprawić wydajność i możliwość bezpośredniej pracy ze sprzętem Zapewnić rozwiązania realnych problemów Zasada zerowego narzutu Prosty dla początkujących, użyteczny dla ekspertów

Rozszerzenia języka nullptr (N1488) Listy inicjalizujące (N1509) Silnie typowane enumeracje (N1513) Rozszerzone wyrażenia stałe (N1521) Delegowanie konstruktorów (N1581) explicit w zastosowaniu do operatorów rzutowania (N1592) Referencja rvalue (semantyka przenoszenia) (N1690)

Rozszerzenia języka c.d. Rozszerzenie semantyki przenoszenia na *this (N1784) Lambda wyrażenia i domknięcia (N1968) Automatyczne wyznaczanie typu oraz nowa deklaracja funkcji (N1978) Pętla for po zakresie (N2049) Wielowątkowy model pamięci (N2052)

Rozszerzenia języka - szablony Szablony ze zmienną liczbą parametrów (N1483) Aliasy szablonów (N1489) Nawiasy ostrokątne (N1649) extern w zastosowaniu do szablonów (N1960) Koncepcje (N2042)

Rozszerzenia biblioteki standardowej Wsparcie dla wielowątkowości (N2320)???

Listy inicjalizujące Konstruktor parametryzowany sekwencją class SequenceClass { public: SequenceClass(std::initializer_list<int> list); }; SequenceClass somevar = {1, 4, 5, 6}; Typy użytkownika (kontenery w szczególności) są traktowane na równi z typami wbudowanymi (założenie języka C++)

Silnie typowane enumeracje enum class Enum : unsigned int { Val1, Val2 }; Brak ukrytej konwersji do użytego typu Ograniczony zakres widoczności nazw Val1 // invalid Enum::Val1 // valid

Rozszerzone wyrażenia stałe constexpr int GetFive() { return 5; } int some_value[getfive() + 5]; Funkcja nie-void poprzedzone słowem kluczowym constexpr Zawiera tylko instrukcję return przekazującą wartość będącą wyrażeniem stałym

Delegowanie konstruktorów class SomeType { int number; public: SomeType(int newnumber) : number(newnumber) {} SomeType() : SomeType(42) {} }; class DerivedType : public SomeType { public: using default SomeType; }; class SomeOtherType { int number = 42; };

Referencja rvalue (semantyka przenoszenia) Aktulanie funkcja nie jest w stanie rozpoznać obiektu tymczasowego (przekazanego przez const&) Nowy typ referencji (&&) Semantyka przenoszenia Konstruktor przenoszący (przyjmujący referencję rvalue) dla std::vector pozwala na ominięcie kopiowania tablicy zawartej w kontenerze

Rozszerzenie semantyki przenoszenia na *this Wyznaczanie metody wywoływanej w przypadku lvalue i rvalue class X { std::vector<char> data_; public: //... std::vector<char> const & data() const & { return data_; } std::vector<char> && data() && { return data_; } };

Lambda wyrażenia i domknięcia <>(int x, int y) (x + y) // wyrażenie <>(int x, int y) -> int { // funkcja int z = x + y; return z + x; } int total; <>(int x) : [&total] (total += x) // referencja <>(int x) : [total] (total += x) // kopia <&>(int x) (total += x) // referencja to stosu <=>(int x) (total += x) // kopia stosu <>() : [this] (this->someprivatememberfunction());

Automatyczne wyznaczanie typu słowo kluczowe auto for (vector<int>::const_iterator i = myvec.begin(); i!= myvec.end(); ++i) for (auto i = myvec.begin(); i!= myvec.end(); ++i) słowo kluczowe decltype int a = 1; float b = 1.5f; decltype(a); // int decltype(b); // float decltype(a + b); // float

Automatyczne wyznaczanie typu c.d. Nowa deklaracja funkcji auto f(int) -> int; template <class T, class U> auto add(t t, U u) -> decltype(t + u); Pozwala na uzależnienie typu wyniku od typów argumentów

Pętla for po zakresie Do biblioteki standardowej zostanie dołączona koncepcja zakresu (Boost) Dodana zostanie także konstrukcja językowa oparta na tej koncepcji int my_array[5] = {1, 2, 3, 4, 5}; for (int &x : my_array) { x *= 2; }

Szablony ze zmienną liczbą parametrów template<typename... Args> class count; template<> struct count<> { enum { value = 0 }; }; template<typename T, typename... Args> struct count<t, Args...> { enum { value = 1 + count<args...>::value }; };

Szablony ze zmienną liczbą parametrów c.d. void printf(const char* s) { while (*s) { if (*s!= % *++s == % ) std::cout << *s++; else throw std::runtime_error(); } } template<typename T, typename... Args> void printf(const char* s, T value, Args... args) { while (*s) { if (*s!= % *++s == % ) std::cout << *s++; else { std::cout << value; return printf(*++s, args...); } } throw std::runtime_error(); }

Aliasy szablonów template< typename first, typename second, int third > class SomeType; template<typename second> using TypedefName = SomeType<OtherType, second, 5>;

Koncepcje auto concept LessThanComparable<typename T> { bool operator<(t, T); }; template<lessthancomparable T> const T& min(const T& x, const T& y) { return x < y? x : y; }; auto concept Regular<typename T> { T::T(); T::T(const T&); T:: T(); T& operator=(t&, const T&); bool operator==(const T&, const T&); bool operator!=(const T&, const T&); void swap(t&, T&); };

Koncepcje c.d. auto concept Convertible<typename T, typename U> { operator U(const T&); }; template<typename U, typename T> where Convertible<T, U> U convert(const T& t) { return t; }

Składanie koncepcji concept InputIterator< typename Iter, typename Value > { where Regular<Iter>; Value operator*(const Iter&); // dereference Iter& operator++(iter&); // pre-increment Iter operator++(iter&, int); // post-increment } concept ForwardIterator< typename Iter, typename Value > : InputIterator<Iter, Value> { /* no syntactic differences, * but adds the multi-pass property */ }

Mapowanie koncepcji concept_map InputIterator<int> { typedef int value_type; typedef int reference; typedef int* pointer; typedef int difference_type; int operator(int x) { return x; } }; copy(1, 17, std::ostream_iterator<int>(std::cout, ));

Mapowanie koncepcji c.d. concept BackInsertionSequence<typename X> { typename value_type = X::value_type; void X::push back(const value_type&); void X::pop back(); value_type& X::back(); const value_type& X::back() const; bool X::empty() const; }; template<backinsertionsequence X> concept_map Stack<X> { typedef X::value_type value_type ; void push(x& x, const value_type &value) { x.push_back(value); } void pop(x& x) { x.pop_back(); } T top(const X& x) { return x.back(); } bool empty(const X& x) { return x.empty(); } };

Koncepcje c.d. Poprawność szablonów używających koncepcji jest sprawdzana w definicji szablonu Szablon może korzystać jedynie z tych funkcjonalności typu, które są zdefiniowane przez koncepcje Koncepcje pozwalają na przeładowanie szablonów

Źródła JTC1/SC22/WG21 - The C++ Standards Committee: http://www.open-std.org/jtc1/sc22/wg21 Wikipedia: http://en.wikipedia.org/wiki/c%2b%2b0x

Dziękuję i zapraszam do dyskusji