Articles of langue avocat

Quel est le but d’une déclaration comme int (x); ou int (x) = 10;

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 […]

Pourquoi n’est-il pas possible de surcharger les modèles de classe?

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 […]

Quelle est la relation entre les normes C et C ++?

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 […]

Dois-je vraiment implémenter un constructeur fourni par l’utilisateur pour les objects const?

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 […]

C vérifie-t-il si un pointeur n’est pas lié sans que le pointeur ne soit déréférencé?

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 […]

Pourquoi const char * const & = “hello” comstack-t-il?

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 à […]

Comprendre la grammaire de typage confus

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 […]

Est-il légal pour le compilateur de dégrader la complexité temporelle d’un programme? Est-ce considéré comme un comportement observable?

( 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 […]

Pourquoi i = v est-il indéfini?

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 […]

Typedefs répétés – non valide en C mais valide en C ++?

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 […]