Articles of langage avocat

Type de retour de l’opérateur conditionnel et recherche en deux phases

Considérez l’extrait suivant: struct Base { }; struct Derived : Base { }; void f(Base &) { std::cout << "f(Base&)\n"; } template void g() { Derived d; f(T{} ? d : d); // 1 } void f(Derived &) { std::cout << "f(Derived&)\n"; } int main() { g(); } Dans ce cas, je pense que la […]

Quel est le résultat de a & b?

Cela est gênant, mais l’opérateur AND au niveau du bit est défini dans la norme C ++ comme suit (accentuation mienne). Les conversions arithmétiques habituelles sont effectuées; le résultat est la fonction ET binary de ses opérandes . L’opérateur ne s’applique qu’aux opérandes d’énumération intégrale ou non. Cela me semble un peu dénué de sens. […]

Est-ce que “-1 >> 5;” comportement non spécifié en C?

C11 §6.5.7 Paragraphe 5: Le résultat de E1 >> E2 est E1 positions de bit E2 décalées à droite. Si E1 a un type non signé ou si E1 a un type signé et une valeur non négative, la valeur du résultat est la partie intégrale du quotient de E1 / 2*^E2 . Si E1 […]

La macro NULL peut-elle être un nullptr?

Selon le projet de norme N4713 (7.11 / 1): Une constante de pointeur nul est un entier littéral (5.13.2) avec la valeur zéro ou une valeur de type std::nullptr_t . et 21.2.3 / 2: La macro NULL est une constante de pointeur nul définie par l’implémentation. suivre que NULL peut être défini comme nullptr . […]

Std :: vector est-il un type défini par l’utilisateur?

Dans les versions 17.6.4.2.1 / 1 et 17.6.4.2.1 / 2 du projet de norme actuel, des ressortingctions sont imposées aux spécialisations injectées par les utilisateurs dans l’ namespace std . Le comportement d’un programme C ++ n’est pas défini s’il ajoute des déclarations ou des définitions à l’espace de noms std ou à un espace […]

Constructeur par défaut supprimé. Des objects peuvent encore être créés… parfois

La vue naïve, optimiste et oh .. tellement erronée de la syntaxe d’initialisation uniforme de c ++ 11 Je pensais que puisque les objects de type C ++ 11 définis par l’utilisateur devaient être construits avec la nouvelle syntaxe {…} au lieu de l’ancienne syntaxe (sauf pour le constructeur surchargé pour std::initializer_list et des parameters […]

Les séparateurs à 14 chiffres C ++ sont-ils autorisés dans les littéraux définis par l’utilisateur?

Alors que clang comstack la ligne suivante, g ++ 6.1 se plaint du séparateur de chiffres (voir exemple en direct sur Coliru ): auto time = 01’23s; Quel compilateur, le cas échéant, est correct selon la norme C ++ 14 (N3796)? Sinon, est-ce que les séparateurs de chiffres autorisés (§2.14.2) ne sont qu’un détail d’implémentation […]

C / C ++ offre-t-il une garantie sur un temps d’exécution minimal?

Pourquoi les compilateurs semblent-ils polis envers les boucles qui ne font rien et ne les éliminent pas? La norme C nécessite-t-elle des boucles pour prendre du temps? Exemple, le code suivant: void foo(void) { while(1) { for(int k = 0; k < 1000000000; ++k); printf("Foo\n"); } } tourne plus lentement que celui-ci: void foo(void) { […]

Spécialisation du modèle de classe: classement partiel et synthèse de fonction

Les règles pour choisir quelle spécialisation de modèle de classe est préférable impliquent de réécrire les spécialisations dans des modèles de fonction et de déterminer quel modèle de fonction est plus spécialisé via les règles de classement pour les modèles de fonction [temp.class.order]. Considérez cet exemple, alors: #include template struct voider { using type = […]

Est-ce que std :: ssortingng sera toujours terminé en C ++ 11?

Dans un article publié en 2008 sur son site, Herb Sutter déclare ce qui suit: Il y a une proposition active pour resserrer cela en C ++ 0x et exiger une terminaison null et éventuellement interdire les implémentations de copie en écriture, pour des raisons liées à la concurrence. Voici le papier: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html . Je […]