Articles of c ++ c ++ 11

Quels algorithmes sont utilisés dans C ++ 11 std :: sort dans différentes implémentations STL?

Le standard C ++ 11 garantit que std::sort a la complexité O (n logn) dans le pire des cas . Ceci est différent de la garantie moyenne en C ++ 98/03, où std::sort pourrait être implémenté avec Quicksort (peut-être combiné avec un sorting par insertion pour n), qui a O (n ^ 2) dans le […]

C ++ 11: Calcul du temps de compilation d’un tableau

Supposons que j’ai une fonction constexpr f: constexpr int f(int x) { … } Et j’ai quelques const int N connus au moment de la compilation: Non plus #define N …; ou const int N = …; selon vos besoins. Je veux avoir un tableau int X: int X[N] = { f(0), f(1), f(2), …, […]

C ++: une macro peut-elle développer “abc” en “a”, “b”, “c”?

J’ai écrit un modèle variadic qui accepte un nombre variable de parameters char , c.-à-d. template struct Foo; Je me demandais juste s’il y avait des astuces de macro qui me permettraient d’instancier ceci avec une syntaxe similaire à celle-ci: Foo ou Foo ou Foo etc. Fondamentalement, tout ce qui vous empêche d’avoir à écrire […]

Existe-t-il une raison pour std :: array de taille zéro dans C ++ 11?

Considérons le morceau de code suivant, qui est parfaitement acceptable par un compilateur C ++ 11: #include #include auto main() -> int { std::array A; for(auto i : A) std::cout << i << std::endl; return 0; } Selon la norme § 23.3.2.8 [ rangées de taille zéro ]: 1 tableau doit prendre en charge le […]

La fonction std :: transform-like qui renvoie un conteneur transformé

J’essaie d’implémenter une fonction similaire à l’algorithme std::transform mais au lieu de prendre l’iterator de sortie par un argument, je veux créer et renvoyer un conteneur avec des éléments d’entrée transformés. Disons qu’il s’appelle transform_container et prend deux arguments: container et functor. Il devrait renvoyer le même type de conteneur mais éventuellement paramétré par un […]

Pourquoi les opérateurs d’access vectoriel ne sont pas spécifiés comme noexcept?

Pourquoi les fonctions de l’ operator[] , front et back std::vector ne sont pas spécifiées comme noexcept ?

Utiliser des constructeurs de classes de base C ++?

Pendant que je travaillais avec des modèles, j’ai dû créer des constructeurs de classes de base accessibles à partir des classes héritées pour la création d’objects afin de réduire les opérations de copier / coller. Je pensais à le faire en using mot clé de la même manière avec les fonctions case, mais cela ne […]

Utilisation standard préférée: range based for ou std :: for_each

En C ++ 11 , il existe deux boucles sur tous les éléments (plage basée pour et for_each). Y a-t-il une raison de préférer l’un à l’autre ou existe-t-il des situations où l’on est plus apte? for (auto& elem: container) { // do something with elem } std::for_each(container.begin(), container.end(), [](Elem& elem) { // do something […]

Les exceptions sont-elles toujours indésirables dans l’environnement en temps réel?

Il y a quelques années, on m’a appris que, dans les applications en temps réel telles que les systèmes embarqués ou le développement C ++ (non-Linux) , les exceptions sont indésirables. (Peut-être que cette leçon était antérieure à gcc-2.95). Mais je sais aussi que la gestion des exceptions est devenue meilleure. Donc, sont C ++ […]

Pourquoi n’y a-t-il pas de méthodes swap () générées par le compilateur dans C ++ 0x?

Les compilateurs C ++ génèrent automatiquement des constructeurs de copie et des opérateurs d’affectation de copie. Pourquoi ne pas swap aussi? Actuellement, la méthode préférée pour implémenter l’opérateur d’atsortingbution de copie est l’idiome de copie et d’échange: T& operator=(const T& other) { T copy(other); swap(copy); return *this; } (en ignorant le formulaire compatible avec la […]