2016-07-18 131 views
10

Esiste qualche differenza in qualsiasi aspetto (limitazione sintattica, prestazioni, ecc.) Tra le seguenti due definizioni?Typedef della classe anonima

using Foo = struct { int a, b, c; }; 

struct Foo { int a, b, c; }; 

(sto chiedendo perché la prima forma è esteticamente più uniforme quando ha messo tra un sacco di using dichiarazioni.)

EDIT: Il post legata al nel commento non fa esattamente risposta la mia domanda. Sono più preoccupato di come le due definizioni di cui sopra differiscono in termini di utilizzo, mentre quel post risponde principalmente come sono diversi in termini di, beh, quello che sono, penso.

+1

Ah, probabilmente ci sarà quando il Reflection TS si realizzerà. – chris

+0

duplicato: https://stackoverflow.com/questions/612328/difference-between-struct-and-typedef-struct-in-c – user2176127

+0

@ user2176127 No, dai un'occhiata alla mia modifica. –

risposta

13

Qui sono alcune differenze mi viene in mente:

  • (ovvio) Non è possibile dichiarare alcun costruttore, un distruttore, o un operatore di assegnazione per una classe senza nome.
  • Non è possibile inoltrare una classe senza nome, incluso come amico di un'altra classe.
  • Non è possibile contrassegnare una classe senza nome final.
  • struct Foo possono essere dichiarati nella stessa regione dichiarativa come una funzione o variabile denominata Foo, anche se, ovviamente, non si dovrebbe fare questo. using Foo = ... non ti concede questa libertà.
+4

Inoltre: "(§ 9.4.2.4 [class.static.data]) Le classi e le classi senza nome contenute direttamente o indirettamente all'interno di classi senza nome non devono contenere membri di dati statici." – AndyG

+0

@AndyG Clang sembra [permetterlo] (http://coliru.stacked-crooked.com/a/fd7e45aec6546ba30) ma non gcc. – 0x499602D2

+1

Puoi anche non usare 'struct Foo' per riferirsi alla classe? – immibis