Articles of c ++ 11

Paramètre non utilisé dans c ++ 11

En c ++ 03 et versions antérieures, pour désactiver l’avertissement du compilateur sur les parameters non utilisés, j’utilise généralement ce code: #define UNUSED(expr) do { (void)(expr); } while (0) Par exemple int main(int argc, char *argv[]) { UNUSED(argc); UNUSED(argv); return 0; } Mais les macros ne sont pas la meilleure pratique pour c ++. Une […]

Fonction séquence-zip pour c ++ 11?

Avec la nouvelle boucle basée sur la plage, nous pouvons écrire du code comme for(auto x: Y) {} Quelle IMO est une énorme amélioration de (par exemple) for(std::vector::iterator x=Y.begin(); x!=Y.end(); ++x) {} Peut-il être utilisé pour boucler deux boucles simultanées, comme la fonction zip Pythons? Pour ceux qui ne connaissent pas Python, le code: Y1 […]

opérateur de flèche (->) dans l’en-tête de fonction

J’ai trouvé un tel code: template auto compose(T a, T1 b) -> decltype(a + b) { return a+b; } J’ai pensé à tous les détails, qui étaient nouveaux pour moi, mais un. Dites-moi s’il vous plaît, où puis-je lire, que signifie l’opérateur de flèche ( -> ) dans l’en-tête de fonction? Je suppose que logiquement, […]

Défaut, valeur et zéro initialisation

Je suis très confus à propos de l’initialisation value & default-& zero. et surtout quand ils utilisent les différents standards C ++ 03 et C ++ 11 (et C ++ 14 ). Je cite et essaie de donner une très bonne réponse Value- / Default- / Zero- Init C ++ 98 et C ++ 03 […]

Besoin d’iterator lors de l’utilisation de boucles basées sur la distance

Actuellement, je ne peux faire que des boucles à firebase database avec ceci: for (auto& value : values) Mais parfois, j’ai besoin d’un iterator à la valeur, au lieu d’une référence (pour quelque raison que ce soit). Existe-t-il une méthode sans avoir à parcourir tout le vecteur en comparant les valeurs?

Comment faire des calculs génériques sur des paquets d’arguments hétérogènes d’une fonction de modèle variadique?

PRÉMISSE: Après avoir un peu joué avec les modèles variadiques, je me suis rendu compte que la réalisation de tout ce qui dépassait légèrement les tâches sortingviales de la méta-programmation devient vite assez compliquée. En particulier, je me suis retrouvé à la recherche d’un moyen d’effectuer des opérations génériques sur un paquet d’arguments tel que […]

Puis-je initialiser par liste un vecteur de type Move-only?

Si je transmets le code suivant via mon instantané GCC 4.7, il tente de copier le unique_ptr dans le vecteur. #include #include int main() { using move_only = std::unique_ptr; std::vector v { move_only(), move_only(), move_only() }; } Évidemment, cela ne peut pas fonctionner car std::unique_ptr n’est pas copiable: erreur: utilisation de la fonction ‘std :: […]

Existe-t-il un équivalent non atomique de std :: shared_ptr? Et pourquoi n’y en a-t-il pas dans ?

Ceci est un peu une question en deux parties, tout sur l’atomicité de std::shared_ptr : 1. Autant que je sache, std::shared_ptr est le seul pointeur intelligent dans qui soit atomique. Je me demande s’il existe une version non atomique de std::shared_ptr disponible (je ne vois rien dans , donc je suis ouvert aux suggestions en […]

Comment std :: function est-il implémenté?

Selon les sources que j’ai trouvées, une expression lambda est essentiellement implémentée par le compilateur créant une classe avec un opérateur d’appel de fonction surchargé et les variables référencées en tant que membres. Cela suggère que la taille des expressions lambda varie, et que suffisamment de variables de référence peuvent avoir une taille arbitraire . […]

Le mot clé volatile C ++ introduit-il une barrière de mémoire?

Je comprends que volatile informe le compilateur que la valeur peut être modifiée, mais pour accomplir cette fonctionnalité, le compilateur doit-il introduire une barrière de mémoire pour le faire fonctionner? De mon sharepoint vue, la séquence des opérations sur les objects volatils ne peut pas être réorganisée et doit être préservée. Cela semble impliquer que […]