168 votes

Qu’est-ce fou C ++11 syntaxe ?

Que cela peut-être signifierait en C ++11 ?

262voto

Lightness Races in Orbit Points 122793

Tout d'abord, nous allons jeter un bog-standard abstrait défini par l'utilisateur (Type Défini par l'Utilisateur):

struct foo { virtual void f() = 0; }; // normal abstract type
foo obj;
// error: cannot declare variable 'obj' to be of abstract type 'foo'

Rappelons aussi que nous pouvons instancier l'UDT dans le même temps que nous la définissons:

struct foo { foo() { cout << "!"; } };          // just a definition

struct foo { foo() { cout << "!"; } } instance; // so much more
// Output: "!"

Nous allons combiner les exemples, et de rappeler que l'on peut définir un type qui a pas de nom:

struct { virtual void f() = 0; } instance; // unnamed abstract type
// error: cannot declare variable 'instance' to be of abstract type '<anonymous struct>'

Nous n'avons pas besoin de la preuve au sujet de l'anonyme de type défini par l'utilisateur, de sorte que nous pouvons perdre la fonction virtuelle pure. Aussi renommer instance de foo, nous obtenons:

struct {} foo;

Proche.


Maintenant, si cette anonyme UDT étaient de dériver de base?

struct bar {};       // base UDT
struct : bar {} foo; // anonymous derived UDT, and instance thereof

Enfin, C++11 introduit étendu initialisers, ce qui nous permet de faire la confusion choses comme ceci:

int x{0};

Et ceci:

int x{};

Et, enfin, ceci:

struct : bar {} foo {};

C'est un sans nom struct découlant de bar, instancié comme foo avec un vide d'initialiseur.

105voto

Frunsi Points 4550

Ceci définit :

  • un struct anonyme,
  • qui est dérivé publiquement``
  • qui ( ) définit rien d’autre que ce qu’il dérivé
  • et enfin, une instance, appelée « foo » est créée,
  • avec une liste d’initialiseurs vide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X