SlideShare une entreprise Scribd logo
1  sur  23
C++11 
Un aperçu en 12 exemples
En bref 
• Syntaxe pratique 
• Plus clair et plus sûr 
• Nouvelles fonctionnalités 
• Stl améliorée 
2
Syntaxe pratique #1 : auto 
auto i = 42; // i is an int 
auto p = new Foo(42); // p is a Foo* 
3 
C++11
Syntaxe pratique #1 : auto 
4 
for(vector<int>::const_iterator it = v.begin(); it != v.end(); ++it) 
{ 
… 
} 
for(auto it = v.begin(); it != v.end(); ++it) 
{ 
… 
} 
C++03 
C++11
Syntaxe pratique #2 : listes d’initialisateurs 
5 
std::vector<int> nombres; 
nombres.push_back(1); 
nombres.push_back(2); 
nombres.push_back(3); 
nombres.push_back(4); 
nombres.push_back(5); 
C++03 
std::vector<int> nombres = { 1, 2, 3, 4, 5 }; C++11
Syntaxe pratique #3 : foreach 
6 
vector<int> nombres; 
for(int i = 0 ; i < nombres.size() ; i++) 
{ 
vector<int> nombres; 
for(int &element : nombres) 
{ 
cout << element << endl; 
} 
int & element = nombres[i] ; 
cout << element << endl; 
} 
C++03 
C++11
Plus clair et plus sûr #1 : héritage virtuel 
7 
class A 
{ 
virtual void f() const; 
}; 
class B : public A 
{ 
void f(); // intentionally not overriding? 
}; 
C++03
Plus clair et plus sûr #1 : héritage virtuel 
8 
class A 
{ 
virtual void f() const; 
}; 
class B : public A 
{ 
virtual void f() override; // error, f does not override 
}; 
C++11
Plus clair et plus sûr #1 : héritage virtuel 
9 
class A 
{ 
virtual void f() final; 
}; 
class B : public A 
{ 
virtual void f(); // error, f is final 
}; 
C++11
Plus clair et plus sûr #2 : enums 
10 
enum Selection 
{ 
None, 
Single, 
Multiple 
}; 
enum Border 
{ 
None, 
Flat, 
Raised 
}; 
Selection sel = None; // name clash 
C++03
Plus clair et plus sûr #2 : enums 
11 
enum class Selection 
{ 
None, 
Single, 
Multiple 
}; 
enum class Border 
{ 
None, 
Flat, 
Raised 
}; 
Selection sel = Selection::None; 
C++11
Plus clair et plus sûr #3 : nullptr 
12 
int* p1 = NULL; // macro 
int* p2(0); 
void f(int n); 
void f (char *s); 
f( NULL ); // which function is called? 
int* p2 = nullptr; 
int i = nullptr; // error 
C++03 
C++11
Nouvelle fonctionnalité #1 : lambdas 
13 
void f(std::vector<int>& v) 
{ 
struct DoSomething 
{ 
void operator()(int) 
{ 
// do something 
} 
}; 
DoSomething do_something; 
std::for_each(v.begin(), v.end(), do_something); 
} 
C++03
Nouvelle fonctionnalité #1 : lambdas 
14 
void f(std::vector<int>& v) 
{ 
void f (std::vector<int>& v) 
{ 
C++03 
std::for_each(v.begin(), v.end(), [](int) { /* do something here*/ }); 
} 
struct DoSomething 
{ 
void operator()(int) 
{ 
// do something 
} 
}; 
DoSomething do_something; 
std::for_each(v.begin(), v.end(), do_something); 
} 
C++11
Nouvelle fonctionnalité #2 : move and rvalues 
15 
template <class T> swap(T& a, T& b) 
{ 
template <class T> swap(T& a, T& b) 
{ 
T tmp(std::move(a)); 
a = std::move(b); 
b = std::move(tmp); 
} 
T tmp(a); 
a = b; 
b = tmp; 
} 
C++03 
C++11
Nv. fonctionnalité #3 : delegated constructor 
16 
class Unloader 
{ 
public: 
Unloader(std::string name, int arms_number) : Init(name, m_arms_number) {} 
Unloader() : Init("", 0) {} 
protected: 
void Init(std::string name, int arms_number) 
{ 
m_name(name); 
m_arms_number(arms_number); 
} 
std::string m_name; 
int m_arms_number; 
}; 
C++03
Nv. fonctionnalité #3 : delegated constructor 
17 
class Unloader 
{ 
public: 
Unloader(std::string name, int arms_number) 
: m_name(name), m_arms_number(arms_number) {} 
Unloader() : Unloader("", 0) {} 
protected: 
std::string m_name; 
int m_arms_number; 
}; 
C++11
Nouvelles fonctionnalités : et aussi … 
18 
• Constant expressions 
• Variadic templates 
• Assertions statiques
Std améliorée #1 : smart pointers 
19 
shared_ptr<Foo> sptr1( new Foo ); 
shared_ptr<Foo> sptr2 = sptr1; // reference counter incremented 
std::unique_ptr<Foo> uptr1(new Foo); 
std::unique_ptr<Foo> uptr2(std::move(uptr1)); // p2 owns Foo 
std::weak_ptr<Foo> wptr1 = sptr1; 
// wptr1.lock() == sptr1 
sptr1.reset( new Foo ); 
// wptr1.expired() == true 
C++11
Std améliorée #2 : regex 
20 
std::string names[] = {"foo.txt", "foo.bat"}; 
std::regex txt_regex("[a-z]+.txt"); 
C++11 
for (const auto &n: names) { 
std::cout << n<< ": " << std::regex_match(fname, txt_regex) << " / "; 
} 
// Prints foo.txt: 1 / foo.bat: 0
Std améliorée #3 : threading 
21 
void call_from_thread() 
{ 
std::cout << "Hello world" << std::endl; 
} 
int main() 
{ 
std::thread t1(call_from_thread); // thread launch 
t1.join(); // join thread with main thread 
return 0; 
} 
C++11
Std améliorée : et aussi … 
22 
• Performances améliorées 
• Chrono 
• Nouveaux conteneurs, nouveaux algorithmes 
• Tuples
23 
A vos questions

Contenu connexe

Tendances

Exercices en langage c
Exercices en langage cExercices en langage c
Exercices en langage c
Daoua Lotfi
 
exercices en C
exercices en Cexercices en C
exercices en C
coursuniv
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2
moisko
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)
DriNox NordisTe
 
Ch8 correction exercices (1)
Ch8 correction exercices (1)Ch8 correction exercices (1)
Ch8 correction exercices (1)
abdellah12
 
Langage C
Langage  CLangage  C
Langage C
jwilili
 

Tendances (20)

Exercices en langage c
Exercices en langage cExercices en langage c
Exercices en langage c
 
Exercices pascal tous les chapitres
Exercices pascal tous les chapitresExercices pascal tous les chapitres
Exercices pascal tous les chapitres
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
exercices en C
exercices en Cexercices en C
exercices en C
 
Lect14 dev2
Lect14 dev2Lect14 dev2
Lect14 dev2
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partie
 
Le langage C
Le langage CLe langage C
Le langage C
 
Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018Corrige exercices pascal_fenni_2018
Corrige exercices pascal_fenni_2018
 
Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)Algorithmique seconde (corrigés et commentaires)
Algorithmique seconde (corrigés et commentaires)
 
Corrigé langage c
Corrigé langage cCorrigé langage c
Corrigé langage c
 
Serie2
Serie2Serie2
Serie2
 
algorithme tronc commun lycée
algorithme tronc commun lycéealgorithme tronc commun lycée
algorithme tronc commun lycée
 
Fiche1 ex-sous-programme
Fiche1 ex-sous-programmeFiche1 ex-sous-programme
Fiche1 ex-sous-programme
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Ch8 correction exercices (1)
Ch8 correction exercices (1)Ch8 correction exercices (1)
Ch8 correction exercices (1)
 
Algorithmique programmation2018
Algorithmique programmation2018Algorithmique programmation2018
Algorithmique programmation2018
 
Langage C
Langage  CLangage  C
Langage C
 

En vedette

Eakin, kaley capstone presentation - read only
Eakin, kaley   capstone presentation - read onlyEakin, kaley   capstone presentation - read only
Eakin, kaley capstone presentation - read only
Kaley Marie
 
Industrial Metal Polishing Service
Industrial Metal Polishing ServiceIndustrial Metal Polishing Service
Industrial Metal Polishing Service
RK Polishing
 
SOS đột quỵ vì gốc tự do
SOS đột quỵ vì gốc tự doSOS đột quỵ vì gốc tự do
SOS đột quỵ vì gốc tự do
sfFKImcKMrS708
 
6 Documentaries on Health You Should Know
6 Documentaries on Health You Should Know6 Documentaries on Health You Should Know
6 Documentaries on Health You Should Know
Jennifer Davis-Oliva
 
The Real Cost of Adult Hearing Loss Report 14th October 2014.pdf
The Real Cost of Adult Hearing Loss Report 14th October 2014.pdfThe Real Cost of Adult Hearing Loss Report 14th October 2014.pdf
The Real Cost of Adult Hearing Loss Report 14th October 2014.pdf
Brian Lamb
 

En vedette (16)

Integumentary system
Integumentary systemIntegumentary system
Integumentary system
 
Motorcycle parts polishing service
Motorcycle parts polishing serviceMotorcycle parts polishing service
Motorcycle parts polishing service
 
Almacenamiento en las nubes diferencias
Almacenamiento en las nubes diferenciasAlmacenamiento en las nubes diferencias
Almacenamiento en las nubes diferencias
 
Eakin, Kaley - Capstone Presentation - Phase 1
Eakin, Kaley - Capstone Presentation - Phase 1Eakin, Kaley - Capstone Presentation - Phase 1
Eakin, Kaley - Capstone Presentation - Phase 1
 
Eakin, kaley capstone presentation - read only
Eakin, kaley   capstone presentation - read onlyEakin, kaley   capstone presentation - read only
Eakin, kaley capstone presentation - read only
 
Industrial Metal Polishing Service
Industrial Metal Polishing ServiceIndustrial Metal Polishing Service
Industrial Metal Polishing Service
 
SOS đột quỵ vì gốc tự do
SOS đột quỵ vì gốc tự doSOS đột quỵ vì gốc tự do
SOS đột quỵ vì gốc tự do
 
Motorcycle parts polishing service
Motorcycle parts polishing serviceMotorcycle parts polishing service
Motorcycle parts polishing service
 
6 Documentaries on Health You Should Know
6 Documentaries on Health You Should Know6 Documentaries on Health You Should Know
6 Documentaries on Health You Should Know
 
The Real Cost of Adult Hearing Loss Report 14th October 2014.pdf
The Real Cost of Adult Hearing Loss Report 14th October 2014.pdfThe Real Cost of Adult Hearing Loss Report 14th October 2014.pdf
The Real Cost of Adult Hearing Loss Report 14th October 2014.pdf
 
Introduction to film editing
Introduction to film editingIntroduction to film editing
Introduction to film editing
 
13 C class notes for Teen Trouble documentary
13 C class notes for Teen Trouble documentary13 C class notes for Teen Trouble documentary
13 C class notes for Teen Trouble documentary
 
Intro to g325 Section B
Intro to g325 Section BIntro to g325 Section B
Intro to g325 Section B
 
Fragmented Audiences in a Diverse Media Landscape
Fragmented Audiences in a Diverse Media Landscape Fragmented Audiences in a Diverse Media Landscape
Fragmented Audiences in a Diverse Media Landscape
 
Film 4 Productions Case Study - G322 Institution & Audience
Film 4 Productions Case Study - G322 Institution & AudienceFilm 4 Productions Case Study - G322 Institution & Audience
Film 4 Productions Case Study - G322 Institution & Audience
 
A Fragmented Audience
A Fragmented AudienceA Fragmented Audience
A Fragmented Audience
 

Similaire à C++11

cours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'applicationcours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'application
kamalomari2
 

Similaire à C++11 (20)

C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
Cours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMACours de C++ / Tronc commun deuxième année ISIMA
Cours de C++ / Tronc commun deuxième année ISIMA
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 
Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appel
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 
Chap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptxChap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptx
 
C4 fonctions
C4 fonctionsC4 fonctions
C4 fonctions
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
POO-chapitre2.pptx
POO-chapitre2.pptxPOO-chapitre2.pptx
POO-chapitre2.pptx
 
cours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'applicationcours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'application
 
Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1Cours de C++, en français, 2002 - Cours 2.1
Cours de C++, en français, 2002 - Cours 2.1
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
La programmation fonctionnelle avec le langage OCaml
La programmation fonctionnelle avec le langage OCamlLa programmation fonctionnelle avec le langage OCaml
La programmation fonctionnelle avec le langage OCaml
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 

C++11

  • 1. C++11 Un aperçu en 12 exemples
  • 2. En bref • Syntaxe pratique • Plus clair et plus sûr • Nouvelles fonctionnalités • Stl améliorée 2
  • 3. Syntaxe pratique #1 : auto auto i = 42; // i is an int auto p = new Foo(42); // p is a Foo* 3 C++11
  • 4. Syntaxe pratique #1 : auto 4 for(vector<int>::const_iterator it = v.begin(); it != v.end(); ++it) { … } for(auto it = v.begin(); it != v.end(); ++it) { … } C++03 C++11
  • 5. Syntaxe pratique #2 : listes d’initialisateurs 5 std::vector<int> nombres; nombres.push_back(1); nombres.push_back(2); nombres.push_back(3); nombres.push_back(4); nombres.push_back(5); C++03 std::vector<int> nombres = { 1, 2, 3, 4, 5 }; C++11
  • 6. Syntaxe pratique #3 : foreach 6 vector<int> nombres; for(int i = 0 ; i < nombres.size() ; i++) { vector<int> nombres; for(int &element : nombres) { cout << element << endl; } int & element = nombres[i] ; cout << element << endl; } C++03 C++11
  • 7. Plus clair et plus sûr #1 : héritage virtuel 7 class A { virtual void f() const; }; class B : public A { void f(); // intentionally not overriding? }; C++03
  • 8. Plus clair et plus sûr #1 : héritage virtuel 8 class A { virtual void f() const; }; class B : public A { virtual void f() override; // error, f does not override }; C++11
  • 9. Plus clair et plus sûr #1 : héritage virtuel 9 class A { virtual void f() final; }; class B : public A { virtual void f(); // error, f is final }; C++11
  • 10. Plus clair et plus sûr #2 : enums 10 enum Selection { None, Single, Multiple }; enum Border { None, Flat, Raised }; Selection sel = None; // name clash C++03
  • 11. Plus clair et plus sûr #2 : enums 11 enum class Selection { None, Single, Multiple }; enum class Border { None, Flat, Raised }; Selection sel = Selection::None; C++11
  • 12. Plus clair et plus sûr #3 : nullptr 12 int* p1 = NULL; // macro int* p2(0); void f(int n); void f (char *s); f( NULL ); // which function is called? int* p2 = nullptr; int i = nullptr; // error C++03 C++11
  • 13. Nouvelle fonctionnalité #1 : lambdas 13 void f(std::vector<int>& v) { struct DoSomething { void operator()(int) { // do something } }; DoSomething do_something; std::for_each(v.begin(), v.end(), do_something); } C++03
  • 14. Nouvelle fonctionnalité #1 : lambdas 14 void f(std::vector<int>& v) { void f (std::vector<int>& v) { C++03 std::for_each(v.begin(), v.end(), [](int) { /* do something here*/ }); } struct DoSomething { void operator()(int) { // do something } }; DoSomething do_something; std::for_each(v.begin(), v.end(), do_something); } C++11
  • 15. Nouvelle fonctionnalité #2 : move and rvalues 15 template <class T> swap(T& a, T& b) { template <class T> swap(T& a, T& b) { T tmp(std::move(a)); a = std::move(b); b = std::move(tmp); } T tmp(a); a = b; b = tmp; } C++03 C++11
  • 16. Nv. fonctionnalité #3 : delegated constructor 16 class Unloader { public: Unloader(std::string name, int arms_number) : Init(name, m_arms_number) {} Unloader() : Init("", 0) {} protected: void Init(std::string name, int arms_number) { m_name(name); m_arms_number(arms_number); } std::string m_name; int m_arms_number; }; C++03
  • 17. Nv. fonctionnalité #3 : delegated constructor 17 class Unloader { public: Unloader(std::string name, int arms_number) : m_name(name), m_arms_number(arms_number) {} Unloader() : Unloader("", 0) {} protected: std::string m_name; int m_arms_number; }; C++11
  • 18. Nouvelles fonctionnalités : et aussi … 18 • Constant expressions • Variadic templates • Assertions statiques
  • 19. Std améliorée #1 : smart pointers 19 shared_ptr<Foo> sptr1( new Foo ); shared_ptr<Foo> sptr2 = sptr1; // reference counter incremented std::unique_ptr<Foo> uptr1(new Foo); std::unique_ptr<Foo> uptr2(std::move(uptr1)); // p2 owns Foo std::weak_ptr<Foo> wptr1 = sptr1; // wptr1.lock() == sptr1 sptr1.reset( new Foo ); // wptr1.expired() == true C++11
  • 20. Std améliorée #2 : regex 20 std::string names[] = {"foo.txt", "foo.bat"}; std::regex txt_regex("[a-z]+.txt"); C++11 for (const auto &n: names) { std::cout << n<< ": " << std::regex_match(fname, txt_regex) << " / "; } // Prints foo.txt: 1 / foo.bat: 0
  • 21. Std améliorée #3 : threading 21 void call_from_thread() { std::cout << "Hello world" << std::endl; } int main() { std::thread t1(call_from_thread); // thread launch t1.join(); // join thread with main thread return 0; } C++11
  • 22. Std améliorée : et aussi … 22 • Performances améliorées • Chrono • Nouveaux conteneurs, nouveaux algorithmes • Tuples
  • 23. 23 A vos questions

Notes de l'éditeur

  1. Avant: boost assign Fonctionne aussi avec maps
  2. Namespacing lourd
  3. + cast en int pas automatique
  4. désormais type std::nullptr_t
  5. Fonctions anonymes, passables en paramètre ou stockables en variables
  6. (+) élements non copiables mais déplaçables (e.g. stream, unique_pointer)
  7. A la boost : shared/weak (éviter références cycliques, mise e nbcache) / unique (seulement un possesseur)