Articles of c ++ 11

Pourquoi certaines personnes utilisent-elles le swap pour les affectations de déplacement?

Par exemple, stdlibc ++ a les caractéristiques suivantes: unique_lock& operator=(unique_lock&& __u) { if(_M_owns) unlock(); unique_lock(std::move(__u)).swap(*this); __u._M_device = 0; __u._M_owns = false; return *this; } Pourquoi ne pas simplement assigner les deux membres __u à * cela directement? Le swap n’implique-t-il pas que __u se voit atsortingbuer le * ce membre, pour ensuite lui atsortingbuer 0 […]

Est-ce que le «paresseux enable_if» est légal en C ++?

J’utilise fréquemment une technique que j’appelle “l’homme paresseux enable_if “, où j’utilise decltype et l’opérateur virgule pour activer une fonction basée sur des entrées de modèle. Voici un petit exemple: template auto foo(F&& f) -> decltype(f(0), void()) { std::cout << "1" << std::endl; } template auto foo(F&& f) -> decltype(f(0, 1), void()) { std::cout << […]

Une plage basée sur C ++ 11 pour une condition de boucle est-elle évaluée à chaque cycle?

for(auto& entity : memoryManager.getItems()) entity->update(mFrameTime); Si memoryManager contient 1000 éléments, est-ce que memoryManager.getItems() est appelé 1000 fois ou un seul au début de la boucle? Le compilateur exécute-t-il une optimisation avec -O2 (ou -O3)? ( memoryManager.getItems() renvoie un std::vector& )

erreur: initialiseur de classe de base anachronique

Le code suivant génère l’erreur de compilation suivante sur toutes les versions de GCC que j’ai essayées, en modes C ++ 98, C ++ 11 et C ++ 14: struct T { T(void* x) : (x) {} }; // main.cpp: In constructor ‘T::T(void*)’: // main.cpp:3:18: error: anachronistic old-style base class initializer [-fpermissive] // T(void* x) […]

Pourquoi avons-nous besoin d’utiliser virtual ~ A () = default; au lieu de virtuel ~ A () {} en C ++ 11?

Dans Stack Overflow post Vérification du type d’object en C ++ 11 , j’ai le commentaire: En C ++ 11, vous voudrez réellement faire du virtual ~A() = default; Sinon, vous perdrez les constructeurs de mouvements implicites. Qu’est-ce que virtual ~A() = default; pour? Comment se fait-il que les constructeurs implicites se perdent avec virtual […]

C ++ 11 équivalent à booster shared_mutex

Existe-t-il un équivalent C ++ 11 pour le boost::shared_mutex . Ou une autre solution pour gérer une situation à lecteurs multiples / enregistreur unique en C ++ 11?

Pourquoi devrais-je utiliser std :: async?

J’essaie d’explorer en profondeur toutes les options du nouveau standard C ++ 11, tout en utilisant std :: async et en lisant sa définition, j’ai remarqué 2 choses, au moins sous linux avec gcc 4.8.1: il s’appelle async , mais il a un “comportement séquentiel”, essentiellement dans la ligne où vous appelez le futur associé […]

std :: to_ssortingng – plus qu’une instance de la fonction surchargée correspond à la liste des arguments

counter est un int void SentryManager::add(std::ssortingng name,std::shared_ptr){ name = name + std::to_ssortingng(counter); } Quel serait le meilleur moyen d’arrêter cette erreur? Quand j’étais fainéant, je faisais de l’int long long (ou quelque chose), mais je suis sûr qu’il y a une meilleure façon de résoudre ce problème. Message d’erreur: sentrymanager.cpp(8): error C2668: ‘std::to_ssortingng’ : ambiguous […]

Fonctions mathématiques de Constexpr

Donc, notez à partir de cette page qu’aucune des fonctions mathématiques de c ++ 11 ne semble utiliser constexpr, alors que je pense que toutes pourraient l’être. Donc, cela me laisse deux questions, l’une est pourquoi ont-ils choisi de ne pas rendre les fonctions constexpr. Un deux pour une fonction comme sqrt Je pourrais probablement […]

Le «type» d’une expression lambda peut-il être exprimé?

En pensant aux expressions lambda comme «sucre syntaxique» pour les objects appelables, le type sous-jacent sans nom peut-il être exprimé? Un exemple: struct gt { bool operator() (int l, int r) { return l > r; } } ; Maintenant, [](int l, int r) { return l > r; } [](int l, int r) { […]