Disons que je vais compiler un code source C ++ mal écrit qui invoque un comportement indéfini, et donc (comme on dit) "tout peut arriver". Du point de vue de ce que la spécification du langage C ++ juge acceptable dans un compilateur "conforme", "quoi que ce soit" dans ce …
Suis-je autorisé à utiliser le NULLpointeur en remplacement de la valeur de 0? Ou y a-t-il quelque chose de mal à faire cela? Comme par exemple: int i = NULL; en remplacement de: int i = 0; Comme expérience, j'ai compilé le code suivant: #include <stdio.h> int main(void) { int …
En regardant ce code: static int global_var = 0; int update_three(int val) { global_var = val; return 3; } int main() { int arr[5]; arr[global_var] = update_three(2); } Quelle entrée de tableau est mise à jour? 0 ou 2? Y a-t-il une partie dans la spécification de C qui indique …
Considérez l'extrait de code suivant: #include <array> int main() { using huge_type = std::array<char, 20*1024*1024>; huge_type t; } Évidemment, cela planterait sur la plupart des plates-formes, car la taille de pile par défaut est généralement inférieure à 20 Mo. Considérez maintenant le code suivant: #include <array> #include <vector> int main() …
J'ai le code suivant: namespace A { struct Foo { int a; }; } struct Foo { int b; }; struct Bar : public A::Foo { Bar(Foo foo) { c = foo.b; } int c; }; Les compilateurs C ++ se plaignent à "c = foo.b" car A :: Foo …
Le sujet a été discuté auparavant , mais ce n'est pas un doublon. Lorsque quelqu'un demande la différence entre decltype(a)et decltype((a)), la réponse habituelle est - aest une variable, (a)est une expression. Je trouve cette réponse insatisfaisante. Tout d'abord, ac'est aussi une expression. Les options pour une expression primaire incluent, …
Dans cette réponse , zwol a fait cette affirmation: La bonne façon de convertir deux octets de données d'une source externe en un entier signé 16 bits est avec des fonctions d'assistance comme celle-ci: #include <stdint.h> int16_t be16_to_cpu_signed(const uint8_t data[static 2]) { uint32_t val = (((uint32_t)data[0]) << 8) | (((uint32_t)data[1]) …
En parcourant la grammaire BNF de C, j'ai trouvé étrange que la règle de production d'une déclaration ressemble à ceci (selon https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of% 20C% 20in% 20Backus-Naur% 20form.htm ): <declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ; Pourquoi utiliser un *quantificateur (signifiant zéro ou plusieurs occurrences) pour le init-declarator? Cela permet aux instructions telles que …
Ci-après, nous utilisons N4140 (C ++ 14 Standard). Conformément au § 17.6.3.4 Exigences de hachage , La valeur renvoyée ne dépendra que de l'argument k de la durée du programme . [Remarque: Ainsi, toutes les évaluations de l'expression h(k)avec la même valeur pour kdonnent le même résultat pour une exécution …
Ce code ne compile pas dans Clang (6,7,8,9, trunk), mais se compile très bien dans GCC (7.1, 8.1, 9.1): template<class T> struct TypeHolder { using type = T; }; template<int i> class Outer { private: template<class T> static constexpr auto compute_type() { if constexpr (i == 42) { return TypeHolder<bool>{}; …
Considérez le code suivant . struct any { template <typename T> operator T &&() const; template <typename T> operator T &() const; }; int main() { int a = any{}; } Ici, le deuxième opérateur de conversion est choisi par la résolution de surcharge. Pourquoi? D'après ce que je comprends, …
Considérez la structure suivante: struct s { int a, b; }; Typiquement 1 , cette structure aura la taille 8 et l'alignement 4. Et si nous créons deux struct sobjets (plus précisément, nous écrivons dans le stockage alloué deux de ces objets), le deuxième objet chevauchant le premier? char *storage …
Considérez ce code simple: void g(); void foo() { volatile bool x = false; if (x) g(); } https://godbolt.org/z/I2kBY7 Vous pouvez voir que gccni clangoptimiser l'appel potentiel à g. Ceci est correct dans ma compréhension: la machine abstraite est de supposer que les volatilevariables peuvent changer à tout moment (en …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.