Articles of c ++ 11

Sémantique “auto” C ++ 11

Lorsque j’utilise C ++ 11 auto , quelles sont les règles de déduction de type en ce qui concerne sa résolution en valeur ou en référence? Par exemple, il est parfois clair: auto i = v.begin(); // Copy, begin() returns an iterator by value Ce sont moins clairs: const std::shared_ptr& get_foo(); auto p = get_foo(); […]

Comment passer std :: unique_ptr autour?

Je fais ma première tentative d’utilisation de C ++ 11 unique_ptr ; Je remplace un pointeur brut polymorphe dans un de mes projets, qui appartient à une classe, mais qui circule assez fréquemment. J’avais des fonctions comme: bool func(BaseClass* ptr, int other_arg) { bool val; // plain ordinary function that does something… return val; } […]

Tapez les opérations de physique en C ++

Est-il sensé en C ++ de définir des unités physiques en tant que types distincts et de définir des opérations valides entre ces types? Y a-t-il un avantage à introduire beaucoup de types et beaucoup de surcharge d’opérateurs au lieu d’utiliser uniquement des valeurs à virgule flottante pour les représenter? Exemple: class Time{…}; class Length{…}; […]

Comment obtenir la durée, en int milli et les secondes à partir de ?

J’essaie d’utiliser la bibliothèque chrono pour les temporisateurs et les durées. Je veux pouvoir avoir une Duration frameStart; (à partir du démarrage de l’application) et une Duration frameDelta; (temps entre les images) Je dois pouvoir obtenir la durée du frameDelta en millisecondes et en secondes flottantes. Comment faites-vous cela avec les nouvelles bibliothèques c ++ […]

Autoriser pour Range-Based Pour avec les classes enum?

J’ai un morceau de code récurrent où je boucle sur tous les membres d’une enum class . La boucle for que j’utilise actuellement semble très peu pratique comparée à la nouvelle range-based for . Y a-t-il un moyen de tirer parti des nouvelles fonctionnalités de C ++ 11 pour réduire la verbosité de mon courant […]

Comment utiliser les classes Standard Library (STL) dans mon interface dll ou ABI?

Il y a eu quelques questions sur l’exportation d’une classe contenant des classes stl par rapport à l’avertissement visuel en studio C4251: par exemple, cette question ou cette question. J’ai déjà lu l’excellente explication sur UnknownRoad. Désactiver aveuglément l’avertissement semble un peu dangereux, même si cela peut être une option. Envelopper toutes ces classes standard […]

C ++ 11 emplace_back sur le vecteur ?

Considérons le programme suivant: #include #include using namespace std; struct T { int a; double b; ssortingng c; }; vector V; int main() { V.emplace_back(42, 3.14, “foo”); } Ça ne marche pas: $ g++ -std=gnu++11 ./test.cpp In file included from /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h:34:0, from /usr/include/c++/4.7/bits/allocator.h:48, from /usr/include/c++/4.7/ssortingng:43, from ./test.cpp:1: /usr/include/c++/4.7/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator::construct(_Up*, _Args&& …) […]

Comment utiliser unique_ptr pour pimpl?

Voici une simplification de ce que je vois lorsque j’essaie d’utiliser unique_ptr pour pimpl. J’ai choisi unique_ptr parce que je veux vraiment que la classe possède le pointeur – je veux que les durées de vie du pointeur pimpl et de la classe soient les mêmes. En tout cas, voici l’en-tête: #ifndef HELP #define HELP […]

Quelle est la raison d’être du comportement de type decltype?

Comme je l’ai compris dans C ++ 11, decltype(expression) est utilisé pour déduire exactement le même type de l’expression donnée. Mais lorsque l’expression est placée entre parenthèses, le type déduit est la référence lvalue au type d’expression. Par exemple: int x; decltype(x) y = x; est équivalent à int y = x; mais, int x; […]

Passer un tableau std :: array de taille inconnue à une fonction

En C ++ 11, comment pourrais-je écrire une fonction (ou une méthode) qui prend un tableau std :: de type connu mais de taille inconnue? // made up example void mulArray(std::array& arr, const int multiplier) { for(auto& e : arr) { e *= multiplier; } } // lets imagine these being full of numbers std::array […]