#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: […]
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; […]
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 […]
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?
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 […]
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; }
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, […]
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}}, […]
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
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?