Si vous regardez la grammaire de *declarator*s in §8/4 vous remarquerez qu’un noptr-declarator peut être écrit en tant que ( ptr-declarator ), c’est-à-dire qu’il peut être écrit en tant que ( declarator-id ), ce qui valide les déclarations comme celles du titre. En fait, ce code comstack sans problème: #include struct A{ int i;}; int […]
La lecture de cette question m’a fait me demander: existe-t-il une raison technique pour refuser les surcharges de modèles de classe? En surchargeant, je veux dire avoir plusieurs modèles avec les mêmes noms, mais des parameters différents, par exemple template struct Foo {}; template struct Foo {}; template struct Foo {}; Le compilateur gère les […]
J’écrivais cette réponse et je citais http://en.cppreference.com/w/cpp/ssortingng/byte/tolower#Parameters N’est pas représentable en tant que caractère non signé et n’est pas égal à EOF, le comportement est indéfini Quand je suis allé inspecter l’édition qui avait ajouté cette phrase, j’ai trouvé que le commentaire de l’auteur: Ne peut pas utiliser de caractères signés négatifs avec une fonction […]
J’ai le code: class A { public: A() = default; private: int i = 1; }; int main() { const A a; return 0; } Il comstack bien sur g ++ (voir ideone ), mais échoue sur clang ++ avec une erreur: l’initialisation par défaut d’un object de type const ‘const A’ nécessite un constructeur […]
J’ai eu cet argument avec certaines personnes qui disaient que les pointeurs en dehors de C provoquent un comportement indéfini même s’ils ne sont pas déréférencés. Exemple: int a; int *p = &a; p = p – 1; la troisième ligne entraînera ici un comportement indéfini même si p n’est jamais déréférencé ( *p n’est […]
Je lis un extrait de code d’un livre et trouve ceci: const char* const & a = “hello”; //can comstack const char*& a = “hello”; //cannot Tout ce que je sais, c’est que lors de l’initialisation d’une référence, la conversion de tableau en pointeur n’aura pas lieu. const char* const & , une référence à […]
Considérez l’extrait de code suivant typedef int type; int main() { type *type; // why is it allowed? type *k ;// which type? } Je reçois une erreur ‘k’ is not declared in this scope . Le compilateur parsing le type *k comme multiplication entre le type* et k . Cette grammaire n’est-elle pas très […]
( Remarque: Ceci est destiné à être une question de langue-avocat , je ne parle pas de compilateurs existants en particulier. ) Quand, si jamais, le compilateur permet de dégrader la complexité temporelle d’un programme? Dans quelles circonstances (le cas échéant) est-ce considéré comme un “comportement observable”, et pourquoi? (Par exemple, le compilateur peut-il légalement […]
A partir de la norme C ++ (C ++ 11), le §1.9.15, qui traite de l’ordre d’évaluation, est l’exemple de code suivant: void g(int i, int* v) { i = v[i++]; // the behavior is undefined } Comme indiqué dans l’exemple de code, le comportement n’est pas défini. (Remarque: la réponse à une autre question […]
Je voudrais une référence standard pour que le code suivant déclenche un avertissement de conformité dans C (testé avec gcc -pedantic ; “typedef gcc -pedantic “), mais cela se passe bien dans C ++ ( g++ -pedantic ): typedef struct Foo Foo; typedef struct Foo Foo; int main() { return 0; } Pourquoi ne puis-je […]