Bonjour.
Il y a quelques jours, j'ai lu presque intégralement la FAQ C++.
J'ai constaté qu'il y avait certains couples question-réponse qui prenaient en compte le C++11, par exemple celui-ci :
Mais ce n'était pas le cas de tous. Alors, je me suis inscrit ici pour proposer quelques modifications de la FAQ.Un constructeur d'une classe peut-il appeler un autre constructeur de la même classe pour initialiser 'this' ?
C++11
Notez que C++11 permet maintenant au constructeur d'une classe de faire directement appel à un autre constructeur. Cette technique s'appelle le delegating constructor.
C++03
Absolument pas.
Prenons un exemple. [...]
J'ai aussi des propositions de correction qui ne concernent pas le C++11, mais je pense que je les mettrai dans un autre fil car le fil présent sera déjà assez chargé.
C'est parti.
Quelle est la différence entre string::data() et string::c_str() ?
Lien : http://cpp.developpez.com/faq/cpp/?p...t-string-c-str
Je propose d'ajouter au début :
Quelles précautions faut-il prendre avec string::c_str() et string::data() ?C++11
string::c_str() et string::data() sont synonymes et retournent un pointeur vers un tableau de caractères, interne à std::string, qui contient le caractère nul.
Lien : http://cpp.developpez.com/faq/cpp/?p...et-string-data
Certaines précautions vraies en C++03 ne sont plus valables en C++11.
Je propose d'ajouter au début :
Comment convertir un nombre en une string ?C++11
string::c_str() et string::data() sont synonymes et retournent un pointeur vers un tableau de caractères, interne à std::string, qui contient le caractère nul.
La précaution à prendre est que le pointeur retourné par ces fonctions peut ne plus être valable suite à une modification ou une suppression de l'objet std::string.
Lien : http://cpp.developpez.com/faq/cpp/?p...-en-une-string
Je propose d'ajouter au début :
Quel conteneur choisir pour stocker mes objets ?C++11
L'entête <string> contient toutes les fonctions dont vous avez besoin :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 string to_string (int val); string to_string (long val); string to_string (long long val); string to_string (unsigned val); string to_string (unsigned long val); string to_string (unsigned long long val); string to_string (float val); string to_string (double val); string to_string (long double val); wstring to_wstring (int val); wstring to_wstring (long val); wstring to_wstring (long long val); wstring to_wstring (unsigned val); wstring to_wstring (unsigned long val); wstring to_wstring (unsigned long long val); wstring to_wstring (float val); wstring to_wstring (double val); wstring to_wstring (long double val);
Lien : http://cpp.developpez.com/faq/cpp/?p...ker-mes-objets
On peut lire :
Il faudrait supprimer ce paragraphe, car de tels conteneurs ont bien été ajoutés à la bibliothèque standard.On peut aussi trouver dans certaines versions de la STL d'autres conteneurs, non standards mais bien connus : tables de hachage, listes simplement chaînées, etc. Leur utilisation est généralement similaire à celle des autres conteneurs standards, mais pensez tout de même à bien vous documenter avant de les utiliser !
Je propose d'ajouter à la fin :
Pourquoi ne faut-il qu'un seul return par fonction ?C++11
De nouveaux conteneurs sont apparus dans la bibliothèque standard :
- std::array : tableau de taille fixe connue à la compilation
- std::unordered_set : ensemble implémenté sous la forme d'une table de hachage. Chaque élément n'apparaît qu'une fois.
- std::unordered_multiset : collection implémentée sous la forme d'une table de hachage. Chaque élément peut apparaitre plusieurs fois.
- std::unordered_map : tableau associatif implémenté sous la forme d'une table de hachage. A chaque clé correspond une seule valeur.
- std::unordered_multimap : tableau associatif implémenté sous la forme d'une table de hachage. A chaque clé correspond une ou plusieurs valeurs.
- std::forward_list : liste simplement chaînée
- std::unique_ptr<T[]> : La spécialisation pour les tableaux de std::unique_ptr libère les ressources avec delete[]. Si la taille du tableau est connue à la compilation, préférez std::array. Si le tableau a besoin d'être redimensionné, préférez std::vector.
Lien : http://cpp.developpez.com/faq/cpp/?p...n-par-fonction
On peut lire :
Et si l'on est obligé d'allouer avec new, C++ nous offre là encore un moyen simple de gérer cela, std::auto_ptrLa dernière phase citée est valable en C++03 mais fausse en C++11.Et pour les objets alloués avec new[] ? C++ ne fournit pas en standard de moyen... sauf d'utiliser plutôt std::vector !
Je propose d'ajouter au début :
Comment écrire un opérateur d'affectation correct ?C++11
Préférez std::unique_ptr à std::auto_ptr. Notez qu'il existe une spécialisation de std::unique_ptr pour les tableaux qui libère les ressources avec delete[].
Lien : http://cpp.developpez.com/faq/cpp/?p...tation-correct
Ce lien conseille d'utiliser le copy and swap.
Je propose d'ajouter à la fin :
Peut-on créer un alias (typedef) sur des templates ?C++11
En C++11, à la place du copy and swap, préférez le copy and move :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 MaClasse& MaClasse::operator =(MaClass Other) // passage par valeur { *this = std::move(Other); // nécessite de définir au préalable l'affectation de mouvement return *this; }
Lien : http://cpp.developpez.com/faq/cpp/?p...-des-templates
La réponse actuelle dit que non.
Je propose d'ajouter au début :
C++11
Oui. Par exemple, on peut écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template<class T> using Tableau = std::vector<T>; Tableau<int> tab; // équivaut à "std::vector<int> tab;"
Partager