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(); […]
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; } […]
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{…}; […]
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 ++ […]
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 […]
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 […]
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&& …) […]
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 […]
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; […]
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 […]