Articles of c ++ 11

C ++ 11 Compilateur: plus proche du standard et à quelle distance?

Je suis intéressé à apprendre le C ++ plus en profondeur maintenant que le C ++ 11 est apparemment ratifié. Quel compilateur implémente actuellement la chose la plus proche disponible pour le support complet de C ++ 11? Dans quelle mesure ledit compilateur est-il totalement compatible? Y a-t-il encore des caractéristiques majeures manquantes ou juste […]

Comment la compilation peut-elle être (exponentielle) plus rapide que l’exécution?

Le code ci-dessous calcule les nombres de Fibonacci par un algorithme exponentiellement lent : #include #include #define DEBUG(var) { std::cout << #var << ": " << (var) < long long { return n < 2 ? 1: fib(n – 1) + fib(n – 2); } int main(int argc, char *argv[]) { const long long fib91 […]

Qu’est-ce qu’un nombre à virgule flottante inférieure à la normale?

La page de référence isnormal () indique: Détermine si le nombre à virgule flottante donné arg est normal, c.-à-d. Qu’il n’est ni nul, ni inférieur à la normale, ni infini, ni NaN. Un nombre égal à zéro, infini ou NaN indique clairement ce que cela signifie. Mais cela dit aussi subnormal. Quand un nombre subnormal?

Pourquoi Clang et VS2013 acceptent-ils les arguments par défaut initialisés par accolade, mais pas GCC 4.8 ou 4.9?

Comme le suggère le titre, j’ai un petit programme de démonstration qui se comstack avec tous ces compilateurs, mais les core dumps quand ils sont exécutés après la compilation avec gcc 4.8 et gcc 4.9: Une quelconque idée du pourquoi? #include struct Foo : std::unordered_map { using std::unordered_map::unordered_map; // ~Foo() = default; // adding this […]

Récupère la taille de std :: array sans instance

Compte tenu de cette structure: struct Foo { std::array bar; }; Comment puis-je obtenir le nombre d’éléments du tableau de bar si je n’ai pas d’instance de Foo ?

Utiliser std :: array avec des listes d’initialisation

À moins que je ne me trompe, il devrait être possible de créer un tableau std: std::array ssortingngs = { “a”, “b” }; std::array ssortingngs({ “a”, “b” }); Et pourtant, en utilisant GCC 4.6.1, je ne parviens pas à faire fonctionner ces éléments. Le compilateur dit simplement: expected primary-expression before ‘,’ token et pourtant les […]

reinterpret_cast crée un object sortingvialement constructible

cppreference † déclare que: Les objects avec des constructeurs sortingviaux par défaut peuvent être créés en utilisant reinterpret_cast sur tout stockage correctement aligné, par exemple sur la mémoire allouée avec std::malloc . Cela implique que le code suivant est bien défini: struct X { int x; }; alignas(X) char buffer[sizeof(X)]; // (A) reinterpret_cast(buffer)->x = 42; […]

Rendre le type personnalisé “tie-capable” (compatible avec std :: tie)

Considérez que j’ai un type personnalisé (que je peux étendre): struct Foo { int a; ssortingng b; }; Comment puis-je atsortingbuer une instance de cet object à un std::tie , c’est-à-dire std::tuple de références? Foo foo = …; int a; ssortingng b; std::tie(a, b) = foo; Echec des tentatives: La surcharge de l’opérateur d’affectation pour […]

Utiliser OpenMP avec C ++ 11 basé sur la plage pour les boucles?

Y a-t-il une contre-indication à cela? Ou le comportement est-il bien spécifié? #pragma omp parallel for for(auto x : stl_container) { … } Car il semble que la spécification OpenMP n’est valide que pour c ++ 98 mais je suppose qu’il pourrait y avoir plus d’incompatibilités dues aux threads C ++ 11, qui ne sont […]

Capture d’une référence par référence dans un lambda C ++ 11

Considère ceci: #include #include std::function make_function(int& x) { return [&]{ std::cout << x << std::endl; }; } int main() { int i = 3; auto f = make_function(i); i = 5; f(); } Ce programme est-il garanti à la sortie 5 sans invoquer un comportement indéfini? Je comprends comment cela fonctionne si je capture x […]