Articles of c ++ 11

Convertir entre la chaîne, la chaîne u16ssortingng et la chaîne u32

J’ai cherché un moyen de convertir entre les types de chaîne Unicode et est tombé sur cette méthode . Non seulement je ne comprends pas complètement la méthode (il n’y a pas de commentaires), mais l’article implique également qu’à l’avenir, il y aura de meilleures méthodes. Si c’est la meilleure méthode, pourriez-vous s’il vous plaît […]

Une classe ne peut-elle pas avoir d’instances de membre constexpr statiques?

Ce code me donne une erreur de type incomplète . Quel est le problème? N’est-il pas permis à une classe d’avoir des instances de membres statiques de elle-même? Est-il possible d’atteindre le même résultat? struct Size { const unsigned int width; const unsigned int height; static constexpr Size big = { 480, 240 }; static […]

Utilisation de std :: forward vs std :: move

Je lis toujours que std::forward est uniquement à utiliser avec les parameters de modèle. Cependant, je me demandais pourquoi. Voir l’exemple suivant: void ImageView::setImage(const Image& image){ _image = image; } void ImageView::setImage(Image&& image){ _image = std::move(image); } Ce sont deux fonctions qui font essentiellement la même chose. l’un prend une référence de valeur l, l’autre […]

C2977: ‘std :: tuple’: trop d’arguments de modèle (MSVC11)

J’essaie de construire googletest avec Visual C ++ 11, mais le code suivant provoque une erreur template void PrintTo(const ::std::tr1::tuple& t, // <– error C2977 ::std::ostream* os) { PrintTupleTo(t, os); } C’est un texte d’erreur: f:\gtest-1.6.0\include\gtest\gtest-printers.h(550): error C2977: ‘std::tuple’ : too many template arguments c:\program files (x86)\microsoft visual studio 11.0\vc\include\utility(72) : see declaration of ‘std::tuple’ […]

Est-ce que std :: bind devrait être compatible avec boost :: asio?

J’essaie d’adapter l’un des exemples boost :: asio pour utiliser les bibliothèques c ++ 11 / TR1 dans la mesure du possible. Le code d’origine ressemble à ceci: void start_accept() { tcp_connection::pointer new_connection = tcp_connection::create(acceptor_.get_io_service()); acceptor_.async_accept(new_connection->socket(), boost::bind(&tcp_server::handle_accept, this, new_connection, boost::asio::placeholders::error)); } Si je remplace boost::bind par std::bind comme suit: void start_accept() { tcp_connection::pointer new_connection = […]

Pourquoi Visual Studio n’effectue-t-il pas une optimisation de la valeur de retour (RVO) dans ce cas?

Je répondais à une question et recommandais une valeur de retour pour un grand type car j’étais convaincu que le compilateur effectuerait une optimisation de la valeur de retour (RVO) . Mais alors, on m’a fait remarquer que Visual Studio 2013 n’effectuait pas RVO sur mon code. J’ai trouvé une question ici concernant le fait […]

Pourquoi avons-nous besoin de marquer les fonctions comme constexpr?

C ++ 11 permet aux fonctions déclarées avec le spécificateur constexpr d’être utilisées dans des expressions constantes telles que des arguments de modèle. Il existe des exigences ssortingctes concernant ce qui est autorisé à être constexpr ; essentiellement une telle fonction encapsule seulement une sous-expression et rien d’autre. (Edit: ceci est détendu en C ++ […]

Pourquoi push_back ne pourrait-il pas être surchargé pour faire le travail de emplace_back?

Tout d’abord, je suis au courant de cette question , mais je ne crois pas que je demande la même chose. Je sais ce que std::vector::emplace_back fait – et je comprends pourquoi je l’utiliserais avec push_back() . Il utilise des modèles variadiques permettant de transférer plusieurs arguments au constructeur d’un nouvel élément. Mais ce que […]

sans exception, déroulement de la stack et performance

L’ ébauche suivante du nouveau livre de Scott Meyers C ++ 11 dit (page 2, lignes 7-21) La différence entre le déroulement de la stack d’appels et son déroulement a un impact surprenant sur la génération de code. Dans une fonction noexcept, les optimiseurs n’ont pas besoin de garder la stack d’exécution dans un état […]

Comment mettre en œuvre la règle des cinq?

MISE À JOUR en bas q1: Comment implémenteriez-vous la règle des cinq pour une classe qui gère des ressources plutôt lourdes, mais dont vous voulez qu’elle soit transmise par valeur, car cela simplifie grandement son utilisation? Ou les cinq éléments de la règle ne sont-ils pas tous nécessaires? En pratique, je commence quelque chose avec […]