Articles of juriste linguistique

Où dans la norme C ++ est «a = b + {1, 2}» interdit dans l’extrait de code ci-dessous?

Où dans la norme est a = b + {1, 2} interdit ci-dessous? class complex { double re, im; public: complex(double r, double i) : re{ r }, im{ i } {} complex& operator+=(const complex& other) { re += other.re; im += other.im; return *this; } }; inline complex operator+(complex lhs, const complex& rhs) { […]

Dans une classe, pourquoi `auto b () -> decltype (a ()) {}` fonctionne, mais `decltype (a ()) b () {}` ne fonctionne pas?

Considérons le code suivant: (Ideone) struct S { int a() {return 0;} decltype(a()) b() {return 1;} }; Cela me donne l’erreur suivante: erreur: impossible d’appeler la fonction membre ‘int S :: a ()’ sans object D’autre part, ce code comstack bien: (Ideone) struct S { int a() {return 0;} auto b() -> decltype(a()) {return 1;} […]

attraper sans essayer de comstackr avec succès

Le code suivant est compilé avec succès avec g ++ version 5.1.0. Notez la catch sans try correspondant dans la fonction membre foo::bar() . Je me demandais si cette syntaxe était légale et si oui, quel effet avait-elle? struct foo { void bar() { } catch (…) { } }; int main () { foo […]

Références à des types incomplets

Selon la norme C ++ 03, est-il valide d’avoir des références à des types incomplets? Je ne suis au courant d’aucune implémentation qui implémente des références comme des pointeurs autres que des pointeurs non nuls. Ce code devrait donc fonctionner. Cependant, je me demande si les références à des types incomplets sont conformes à la […]

Pseudo-destructor-name a-t-il un sens pour les types non-class et non-enum?

Il y a une citation de 5.2.4 / 1 de N3797 , le brouillon final de travail de C ++ 14: Utilisation d’un pseudo-destructeur-nom après un point. ou flèche -> opérateur représente le destructeur pour le type non-classe désigné par nom-type ou decltype-specifier. Question Pour quel type on peut considérer pseudo-destructor-name , est-ce seulement enum-type […]

Définir le champ de la classe dérivée en convertissant le pointeur de la classe de base

class A { public: int a; }; class B:public A { public: int b; void foo() { b=a*a; } }; int _tmain(int argc, _TCHAR* argv[]) { A * a=new A; a->a=10; ((B*)a)->foo(); cout<b; } Cela fonctionne pour b=100 , mais je ne sais pas par quelles règles cela fonctionne. Où est-ce que b est stocké? […]

L’object est-il garanti pour être initialisé avant d’appeler sa fonction membre?

de cette question (toujours pas résolu) je tombe sur ce nouveau problème, alors voici un exemple //main.cpp int main() { return 0; } //file1.cpp #include “bh” B b; //file2.cpp #include “ah” A a; //ah #pragma once #include #include “bh” extern B b; class A { public: A(){ std::cout << "a cotr" << std::endl;b.Use(); } }; […]

Initialisation d’une variable d’observation

Y at-il quelque chose dans la norme qui définit l’initialisation d’une variable à partir de la variable qu’elle ombre? Par exemple: int i = 7; { int i = i; } Visual Studio 2013 permet cela sans avertissement et fonctionne comme prévu. La variable i interne est 7. Clang et GCC me préviennent toutefois qu’une […]

La promotion vers int est-elle requirejse par la norme C ++?

Prenez le fragment de code suivant. short int a, b = 30001, c = 30002, d = 30003; a = b + c – d; Supposons que short int est de 16 bits et int de 32 bits. Ce comportement est-il indéfini en C ++? Mon interprétation de la norme C est que b et […]

Les déclarations de membres de données non statiques sont-elles non statiques?

Je souhaite reprendre une question sur la base de la réponse et de la discussion suivante sur: Pourquoi une référence à un membre de données non statique n’est-elle pas une variable? : Un membre de données non statique de la classe ne crée pas de nouvelle variable, il vous aide simplement à définir les propriétés […]