Articles of c ++ 11

Utiliser auto dans une fonction lambda

#include #include void foo( int ) { } int main() { std::vector v( { 1,2,3 } ); std::for_each( v.begin(), v.end(), []( auto it ) { foo( it+5 ); } ); } Lorsque compilé, l’exemple ci-dessus démarre la sortie d’erreur comme suit: h4.cpp: In function ‘int main()’: h4.cpp:13:47: error: parameter declared ‘auto’ h4.cpp: In lambda function: […]

Durée de vie des objects temporaires lors de l’initialisation de la liste

J’ai toujours supposé que les objects temporaires vivent jusqu’à la fin d’une expression complète. Voici cependant une curieuse différence entre les initialisations d’un std::vector et d’un tableau. Veuillez considérer le code suivant: #include #include struct ID{ static int cnt; // the number of living object of class ID at the moment of creation: int id; […]

Pourquoi C ++ 11 ne prend-il pas en charge les structures anonymes alors que C11 le fait?

C11 supporte les structures anonymes, comme ceci: struct Foo { struct { size_t x, y; }; }; struct Foo f; fx = 17; fy = 42; Fondamentalement, les membres d’une telle struct sont traités comme s’ils étaient membres de la struct ou de l’ union englobante (récursivement, si la structure englobante était elle-même anonyme). Quelle […]

Les variables atomiques sont-elles sans locking?

Quand on parle de variables atomiques, telles que l’ atomic C ++ 11 atomic , est-ce que le locking est libre? Ou est-ce que la liberté de locking est quelque chose de différent? Si je gère une queue avec des variables atomiques, sera-t-il plus lent qu’une queue sans locking?

Quelles implémentations std :: async utilisent des pools de threads?

L’un des avantages de l’utilisation de std::async au lieu de créer manuellement des objects std::thread est que std::async peut utiliser des pools de threads sous les couvertures pour éviter les problèmes de surabonnement. Mais quelles implémentations font cela? Ma compréhension est que l’implémentation de Microsoft le fait, mais qu’en est-il de ces autres implémentations async […]

Si nullptr_t n’est pas un mot-clé, pourquoi char16_t et char32_t?

Comme discuté dans Pourquoi que nullptr_t ne soit pas un mot-clé , il est préférable d’éviter d’introduire de nouveaux mots-clés, car ils peuvent briser la compatibilité ascendante. Pourquoi alors les mots-clés char16_t et char32_t -ils aussi bien définis? namespace std { typedef decltype(u’q’) char16_t; typedef decltype(U’q’) char32_t; }

Comment puis-je donner aux stream des messages d’exception mieux?

Le problème À l’heure actuelle, le support des exceptions pour les stream est terrible. Lorsque la bibliothèque Boost.System a été adoptée dans C ++ 11, on a eu l’impression que les exceptions pourraient être améliorées. Tout le changement a été de remplacer std::exception par std::system_error . Bien que soit une bonne bibliothèque pour les développeurs, […]

Initialisation de std :: tuple à partir de la liste d’initialisation

Je me demande si le tuple peut être initialisé par la liste d’initialisation (pour être plus précis – par initializer_list de initializer_lists)? Considérant la définition du tuple: typedef std::tuple< std::array, std::array, std::array, std::array > vertex; y a-t-il un moyen de faire ce qui suit: static vertex const nullvertex = { {{0, 0, 0}}, {{0.0, 0.0}}, […]

Itérateur horizontal

Y at-il une implémentation d’iterator existante (peut-être sous boost) qui implémente une sorte d’iterator d’aplatissement? Par exemple: unordered_set<vector > s; s.insert(vector()); s.insert({1,2,3,4,5}); s.insert({6,7,8}); s.insert({9,10,11,12}); flattening_iterator<unordered_set<vector >::iterator> it( … ), end( … ); for(; it != end; ++it) { cout << *it << endl; } //would print the numbers 1 through 12

L’parsing de C ++ la plus vexante à nouveau

Tiré directement de http://herbsutter.com/2013/05/09/gotw-1-solution/ Alors que le widget w(); est clair pour moi, je ne sais pas comment le code ci-dessous peut être une déclaration de fonction? // same problem (gadget and doodad are types) // widget w( gadget(), doodad() ); // pitfall: not a variable declaration Comment est-ce possible?