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) 
: m_name(name), m_arms_number(arms_number) 
{ } 
Unloader() 
: m_name(""), m_arms_number(0) // duplicated code 
{ } 
protected: 
const std::string m_name; 
const 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: 
const std::string m_name; 
const 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

Cours c#
Cours c#Cours c#
Cours c#
zan
 
Langage C
Langage  CLangage  C
Langage C
jwilili
 

Tendances (20)

Introduction au lock-free programming avec std::atomics
Introduction au lock-free programming avec std::atomicsIntroduction au lock-free programming avec std::atomics
Introduction au lock-free programming avec std::atomics
 
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
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
Cours c#
Cours c#Cours c#
Cours c#
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 
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
 
Chap1V2019: Cours en C++
Chap1V2019: Cours en C++Chap1V2019: Cours en C++
Chap1V2019: Cours en C++
 
C# langage & syntaxe
C#   langage & syntaxeC#   langage & syntaxe
C# langage & syntaxe
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
C++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelistC++ Metaprogramming : multidimensional typelist
C++ Metaprogramming : multidimensional typelist
 
Langage C
Langage  CLangage  C
Langage C
 
Formation python
Formation pythonFormation python
Formation python
 

En vedette

Presentation_e-TIC Consulting_Publique
Presentation_e-TIC Consulting_PubliquePresentation_e-TIC Consulting_Publique
Presentation_e-TIC Consulting_Publique
Herve COLLIGNON
 
Cahier-des-Écoles-N3
Cahier-des-Écoles-N3Cahier-des-Écoles-N3
Cahier-des-Écoles-N3
Loubna Chatta
 
Cahier-des-Écoles-N2
Cahier-des-Écoles-N2Cahier-des-Écoles-N2
Cahier-des-Écoles-N2
Loubna Chatta
 
Ia.Bienvenidos Al Curso De Asistencia TecnolóGica!!!
Ia.Bienvenidos Al Curso De Asistencia TecnolóGica!!!Ia.Bienvenidos Al Curso De Asistencia TecnolóGica!!!
Ia.Bienvenidos Al Curso De Asistencia TecnolóGica!!!
Docencia
 
Normas generales en laboratorio de química
Normas generales en laboratorio de químicaNormas generales en laboratorio de química
Normas generales en laboratorio de química
Blanca Bautista
 

En vedette (20)

Treball tempestaisuf
Treball tempestaisufTreball tempestaisuf
Treball tempestaisuf
 
VI World Cafe de Euskadi para la Igualdad: Cosecha de Conocimiento
VI World Cafe de Euskadi para la Igualdad: Cosecha de ConocimientoVI World Cafe de Euskadi para la Igualdad: Cosecha de Conocimiento
VI World Cafe de Euskadi para la Igualdad: Cosecha de Conocimiento
 
Presentation_e-TIC Consulting_Publique
Presentation_e-TIC Consulting_PubliquePresentation_e-TIC Consulting_Publique
Presentation_e-TIC Consulting_Publique
 
Cultura nazca
Cultura nazcaCultura nazca
Cultura nazca
 
Guias tematicas lourdes
Guias tematicas lourdesGuias tematicas lourdes
Guias tematicas lourdes
 
Cahier-des-Écoles-N3
Cahier-des-Écoles-N3Cahier-des-Écoles-N3
Cahier-des-Écoles-N3
 
Cahier-des-Écoles-N2
Cahier-des-Écoles-N2Cahier-des-Écoles-N2
Cahier-des-Écoles-N2
 
Personal learning environments
Personal learning environmentsPersonal learning environments
Personal learning environments
 
11.fit2015 jeudi plan_régional_formation-frotsipaca-mancini
11.fit2015 jeudi plan_régional_formation-frotsipaca-mancini11.fit2015 jeudi plan_régional_formation-frotsipaca-mancini
11.fit2015 jeudi plan_régional_formation-frotsipaca-mancini
 
Open Eqaula
Open EqaulaOpen Eqaula
Open Eqaula
 
Séminaire de formation: LES OBJECTIFS DE DÉVELOPPEMENT DURABLE: QUELLES PERSP...
Séminaire de formation: LES OBJECTIFS DE DÉVELOPPEMENT DURABLE: QUELLES PERSP...Séminaire de formation: LES OBJECTIFS DE DÉVELOPPEMENT DURABLE: QUELLES PERSP...
Séminaire de formation: LES OBJECTIFS DE DÉVELOPPEMENT DURABLE: QUELLES PERSP...
 
Aspects juridiques et financiers d’Horizon 2020
Aspects juridiques et financiers d’Horizon 2020 Aspects juridiques et financiers d’Horizon 2020
Aspects juridiques et financiers d’Horizon 2020
 
tafe transcripts
tafe transcriptstafe transcripts
tafe transcripts
 
Delincuencia Informatica Santiago Mir Puig Editorial Ppu(Promociones Y Pu...
Delincuencia Informatica   Santiago Mir Puig   Editorial Ppu(Promociones Y Pu...Delincuencia Informatica   Santiago Mir Puig   Editorial Ppu(Promociones Y Pu...
Delincuencia Informatica Santiago Mir Puig Editorial Ppu(Promociones Y Pu...
 
Sécurité samuel quenette
Sécurité   samuel quenetteSécurité   samuel quenette
Sécurité samuel quenette
 
Proceso de aadjudicación pps
Proceso de aadjudicación ppsProceso de aadjudicación pps
Proceso de aadjudicación pps
 
The emerald-fr
The emerald-frThe emerald-fr
The emerald-fr
 
Bilan du PASRI par M. Khaled GHEDIRA
Bilan du PASRI par M. Khaled GHEDIRABilan du PASRI par M. Khaled GHEDIRA
Bilan du PASRI par M. Khaled GHEDIRA
 
Ia.Bienvenidos Al Curso De Asistencia TecnolóGica!!!
Ia.Bienvenidos Al Curso De Asistencia TecnolóGica!!!Ia.Bienvenidos Al Curso De Asistencia TecnolóGica!!!
Ia.Bienvenidos Al Curso De Asistencia TecnolóGica!!!
 
Normas generales en laboratorio de química
Normas generales en laboratorio de químicaNormas generales en laboratorio de química
Normas generales en laboratorio de química
 

Similaire à C++11 en 12 exemples simples

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
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SiratiSoufiane
 

Similaire à C++11 en 12 exemples simples (20)

C++11
C++11C++11
C++11
 
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
 
Chap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdfChap 2--POO avec JAVA.pdf
Chap 2--POO avec JAVA.pdf
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
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
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
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
 
Chap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptxChap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptx
 
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
 
POO-chapitre2.pptx
POO-chapitre2.pptxPOO-chapitre2.pptx
POO-chapitre2.pptx
 
C4 fonctions
C4 fonctionsC4 fonctions
C4 fonctions
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
Correction-TD1.pdf
Correction-TD1.pdfCorrection-TD1.pdf
Correction-TD1.pdf
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
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
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 
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
 
Presentation Csharp et winforms
Presentation Csharp et winformsPresentation Csharp et winforms
Presentation Csharp et winforms
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
 

C++11 en 12 exemples simples

  • 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) : m_name(name), m_arms_number(arms_number) { } Unloader() : m_name(""), m_arms_number(0) // duplicated code { } protected: const std::string m_name; const 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: const std::string m_name; const 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)