Outils d'utilisateurs

Outils du Site


nouvelles_fonctionnalites_du_c_11

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

nouvelles_fonctionnalites_du_c_11 [2014/03/10 12:45]
188.141.132.194 [Règles sur la génération automatique pour le déplacement et la copie]
nouvelles_fonctionnalites_du_c_11 [2014/11/04 00:52] (Version actuelle)
gbdivers
Ligne 1: Ligne 1:
 ====== Les nouvelles fonctionnalités du C++11 ====== ====== Les nouvelles fonctionnalités du C++11 ======
 +
 +===== GCC 4.9 =====
 +
 +[[https://isocpp.org/blog/2014/04/gcc-4.9.0|GCC 4.9.0 Released]]
  
 ===== GCC 4.8 ===== ===== GCC 4.8 =====
Ligne 200: Ligne 204:
 Les littérales définies par l'utilisateur acceptent quatre types de paramètre en entrée : Les littérales définies par l'utilisateur acceptent quatre types de paramètre en entrée :
  
-les entiers, en utilisant les types ''unsigned long long'' ou ''const char*'' ; +  * les entiers, en utilisant les types ''unsigned long long'' ou ''const char*'' ; 
-les nombres réels, en utilisant les types ''long double'' ou ''const char*'' ; +  * les nombres réels, en utilisant les types ''long double'' ou ''const char*'' ; 
-les chaînes de caractères, en utilisant la paire d'arguments (''const char*'', ''size_t'') ; +  * les chaînes de caractères, en utilisant la paire d'arguments (''const char*'', ''size_t'') ; 
-un caractère, en utilisant le type ''char''.+  * un caractère, en utilisant le type ''char''. 
 Seuls les suffixes commençant par "_" sont autorisés. Les autres sont réservés pour un usage ultérieur par la norme. Seuls les suffixes commençant par "_" sont autorisés. Les autres sont réservés pour un usage ultérieur par la norme.
  
Ligne 474: Ligne 479:
 Cette version de gcc implémente les règles proposées dans le document N3053 relatives à la génération automatique des opérations de copie et de déplacement. Ces différentes règles permettent de comprendre quand et pourquoi le compilateur ajoute les constructeurs et opérateurs de copie et de déplacement Cette version de gcc implémente les règles proposées dans le document N3053 relatives à la génération automatique des opérations de copie et de déplacement. Ces différentes règles permettent de comprendre quand et pourquoi le compilateur ajoute les constructeurs et opérateurs de copie et de déplacement
  
-Les types fondamentaux du C++ (build-in types) proposent la sémantique de déplacement similaire à la copie. +  - Les types fondamentaux du C++ (build-in types) proposent la sémantique de déplacement similaire à la copie. 
-Une structure est correctement formée pour la copie si et seulement si ses bases et ses membres sont correctement formés pour la copie. +  - Une structure est correctement formée pour la copie si et seulement si ses bases et ses membres sont correctement formés pour la copie. 
-Une structure est correctement formée pour le déplacement si et seulement si ses bases et ses membres sont correctement formés pour le déplacement. +  - Une structure est correctement formée pour le déplacement si et seulement si ses bases et ses membres sont correctement formés pour le déplacement. 
-Les fonctions pour la copie et le déplacement peuvent être spécifiés avec ''=delete'' et ''=default''. +  - Les fonctions pour la copie et le déplacement peuvent être spécifiés avec ''=delete'' et ''=default''. 
-La sémantique de déplacement est implicitement déclarée si la structure est correctement formée et si la copie n'est pas déclarée par l'utilisateur (en utilisant ''=default'' par exemple). On doit alors ajouter explicitement le constructeur par déplacement avec : ''default''. +  - La sémantique de déplacement est implicitement déclarée si la structure est correctement formée et si la copie n'est pas déclarée par l'utilisateur (en utilisant ''=default'' par exemple). On doit alors ajouter explicitement le constructeur par déplacement avec : ''default''.<code cpp>
-<code cpp>+
 struct no_move { struct no_move {
     no_move( const no_move& ) = default;     no_move( const no_move& ) = default;
Ligne 489: Ligne 493:
 }; };
 </code> </code>
 +  - De manière identique, la copie est supprimée si le déplacement est déclaré par l'utilisateur.<code cpp>
 +struct no_copy {
 +    no_copy( no_copy&& ) = default;
 +};
  
-De manière identique, la copie est supprimée si le déplacement est déclaré par l'utilisateur. +struct has_copy { 
-<code cpp> +    has_copy( const has_copy& ) = default; 
- +    has_copy( has_copy&& ) = default; 
-            struct no_copy { +};
-                no_copy( no_copy&& ) = default; +
-            }; +
- +
-            struct has_copy { +
-                has_copy( const has_copy& ) = default; +
-                has_copy( has_copy&& ) = default; +
-            };+
 </code> </code>
- +  - Les unions suppriment implicitement le déplacement si l'un de leur membre possède un déplacement non-trivial. Idem pour la copie.<code cpp>
-Les unions suppriment implicitement le déplacement si l'un de leur membre possède un déplacement non-trivial. Idem pour la copie. +
- +
-<code cpp>+
 struct non_trivial_copier { struct non_trivial_copier {
     non_trivial_copier( const non_trivial_copier& ) = delete;     non_trivial_copier( const non_trivial_copier& ) = delete;
Ligne 605: Ligne 603:
 </code> </code>
  
-Les lambdas (ou fonctions lambda ou expressions lambda) permettent de créer facilement des foncteurs directement dans l'appel de l'algorithme :+Les lambdas (ou fonctions lambda ou expressions lambda) permettent de créer facilement des foncteurs directement dans l'appel de l'algorithme :
  
 <code cpp> <code cpp>
Ligne 625: Ligne 623:
   - retour (optionnel) : type retourné par la lambda ;   - retour (optionnel) : type retourné par la lambda ;
   - code : corps de la fonction lambda.   - code : corps de la fonction lambda.
-Les paramètres passés à la lambda+**Les paramètres passés à la lambda** \\
 L'algorithme std::sort a besoin d'un prédicat qui prend deux paramètres en entrée et renvoi un booléan. L'algorithme std::sort a besoin d'un prédicat qui prend deux paramètres en entrée et renvoi un booléan.
  
-Les paramètres capturés dans la lambda+**Les paramètres capturés dans la lambda** \\
 Il est possible d'accéder à des variables déclarées en dehors de la lambda : Il est possible d'accéder à des variables déclarées en dehors de la lambda :
  
Ligne 642: Ligne 640:
   - ''[&count]'' : capture la variable ''count'' par référence ;   - ''[&count]'' : capture la variable ''count'' par référence ;
   - ''[=count]'' : capture la variable ''count'' par copie.   - ''[=count]'' : capture la variable ''count'' par copie.
-Les types de retour+**Les types de retour** \\
 Habituellement, le type de retour est automatiquement déterminé à partir de l'expression ''return''. Si aucune valeur n'est retournée, le type de retour est ''void''. Mais il est également possible de préciser explicitement le type de retour avec la syntaxe de type de retour en suffixe. Habituellement, le type de retour est automatiquement déterminé à partir de l'expression ''return''. Si aucune valeur n'est retournée, le type de retour est ''void''. Mais il est également possible de préciser explicitement le type de retour avec la syntaxe de type de retour en suffixe.
  
Ligne 1378: Ligne 1376:
   * documentation de [[http://gcc.gnu.org/projects/cxx0x.html|gcc 4.7]] ;   * documentation de [[http://gcc.gnu.org/projects/cxx0x.html|gcc 4.7]] ;
   * [[http://www.stroustrup.com/C++11FAQ.html|FAQ C++11]] sur le site de Bjarne Stroustrup ;   * [[http://www.stroustrup.com/C++11FAQ.html|FAQ C++11]] sur le site de Bjarne Stroustrup ;
-  * Overview of the new C++0x de Scott Meyers (2010).+  * Overview of the new C++11 de Scott Meyers (2010). 
 +  * [[http://www.codergears.com/Blog/?p=431|Learn from Folly source code the new C++11 features]] : exemple d'utilisation intensive du C++11 dans Folly (la bibliothèque C++ créée par Facebook)
  
 Remarque : le code est directement issu de la documentation de gcc, utilisable selon les termes de la licence consultable à la fin de [[http://gcc.gnu.org/gcc-4.7/changes.html|cette page]], ainsi que des drafts du comité de normalisation dont les liens sont donnés. Remarque : le code est directement issu de la documentation de gcc, utilisable selon les termes de la licence consultable à la fin de [[http://gcc.gnu.org/gcc-4.7/changes.html|cette page]], ainsi que des drafts du comité de normalisation dont les liens sont donnés.
  
 {{tag> C++ C++11 GCC}} {{tag> C++ C++11 GCC}}
nouvelles_fonctionnalites_du_c_11.1394451937.txt.gz · Dernière modification: 2014/03/10 12:45 par 188.141.132.194