Articles of c ++ 11

Est-ce que nullptr peut être émulé dans gcc?

J’ai vu que nullptr était implémenté dans Visual Studio 2010. J’aime le concept et je veux commencer à l’utiliser dès que possible; Cependant, GCC ne le supporte pas encore. Mon code doit être exécuté sur les deux (mais ne doit pas être compilé avec d’autres compilateurs). Y a-t-il un moyen de “l’émuler”? Quelque chose comme: […]

Bind Vs Lambda?

J’ai une question concernant le style préféré: std :: bind Vs lambda en C ++ 0x. Je sais qu’ils servent à des fins différentes mais prenons un exemple de fonctionnalité croisée. En utilisant lambda : uniform_int distribution(1, 6); mt19937 engine; // lambda style auto dice = [&]() { return distribution(engine); }; En utilisant bind : […]

Comment déterminer par programmation si une expression est rvalue ou lvalue en C ++?

Quelle est la meilleure façon de déterminer si une expression est une valeur ou une valeur en C ++? Probablement, ce n’est pas utile en pratique mais comme j’apprends les rvalues ​​et les lvalues, j’ai pensé qu’il serait bien d’avoir une fonction is_lvalue qui renvoie true si l’expression passée en entrée est une lvalue et […]

Les lambda ont besoin de capturer ‘this’ pour appeler la fonction membre statique?

Pour le code suivant: struct B { void g() { []() { B::f(); }(); } static void f(); }; g ++ 4.6 donne l’erreur: test.cpp: Dans la fonction lambda: test.cpp: 44: 21: erreur: ‘this’ n’a pas été capturé pour cette fonction lambda (Fait intéressant, g ++ 4.5 comstack bien le code). Est-ce un bogue dans […]

Quelle est la particularité de R et L dans le préprocesseur C ++?

J’ai exécuté le code suivant via le préprocesseur Visual Studio 2013. La sortie me surprend. Contenu de hello.cpp: #define A(j) #j A(A?) A(B?) A(C?) A(D?) A(E?) A(F?) A(G?) A(H?) A(I?) A(J?) A(K?) A(L?) A(M?) A(N?) A(O?) A(P?) A(Q?) A(R?) A(S?) A(T?) A(U?) A(V?) A(W?) A(X?) A(Y?) A(Z?) La commande: cl /P hello.cpp bonjour.i contient: #line […]

En C ++ 11, est-ce que `i + = ++ i + 1` présente un comportement indéfini?

Cette question a été soulevée pendant que je lisais (les réponses à) Alors, pourquoi i = ++ i + 1 est-il bien défini en C ++ 11? Je suppose que l’explication subtile est que (1) l’expression ++i renvoie une lvalue mais que + prend des valeurs comme opérandes, donc une conversion de lvalue en valeur […]

Pourquoi cet extrait de code utilisant une initialisation uniforme comstack-t-il avec g ++ 4.6 mais pas avec g ++ 4.7?

Notez que dérivée utilise la syntaxe d’initialisation uniforme C ++ 11 pour appeler le constructeur de classe de base. class base { protected: base() {} }; class derived : public base { public: derived() : base{} // <– Note the c++11 curly brace syntax // using uniform initialization. Change the // braces to () and […]

Obtenir la version Apple Clang et la version LLVM en amont correspondante

Je veux comprendre quelle version de clang Apple installée dans mon macbook, pour voir avec les fonctionnalités c ++ 11 et / ou c ++ 14 sont disponibles. J’ai tapé cette commande: clang –version //—-response Apple LLVM version 7.0.0 (clang-700.1.76) Target: x86_64-apple-darwin15.0.0 Thread model: posix Mais je ne suis pas capable de comprendre ce que […]

Alignement de la mémoire: comment utiliser alignof / alignas?

Je travaille avec la mémoire partagée dès maintenant. Je ne peux pas comprendre l’ alignof et l’ alignas . cppreference n’est pas claire: alignof renvoie “alignment” mais qu’est-ce que “alignment”? nombre d’octets à append pour le prochain bloc à aligner? taille rembourrée? Débordement de stack / entrées de blogs ne sont pas claires aussi. Est-ce […]

Peut std :: vector utiliser une petite optimisation de tampon?

Je me demandais avec mon collègue si std :: vector peut être implémenté pour utiliser une petite optimisation de tampon. En consultant le brouillon C ++ 11, j’ai lu au 23.3.1p8 L’expression a.swap (b), pour les conteneurs a et b d’un type de conteneur standard autre que array, doit échanger les valeurs de a et […]