2011-03-19 11 views
7

Perché la struttura vuota in C è una violazione del vincolo? Perché questa regola viene modificata in C++?Struttura vuota in C e struttura vuota in C++

Ci sono ragioni storiche?

+0

http://stackoverflow.com/questions/755305/empty-structure-in-c –

+0

possibile duplicato di [Qual è la dimensione di una struttura vuota in C?] (Http://stackoverflow.com/questions/ 1626446/what-is-the-size-of-an-empty-struct-in-c) – Nawaz

+2

@Nawaz: Questa è una domanda diversa. La vera domanda è "perché" non "cosa". –

risposta

8

poiché non si ha l'ereditarietà in C, non sono necessari. Se si desidera solo avere un tipo di puntatore distinguibile, è possibile utilizzare i puntatori a tipi incompleti.

struct opaque; 

struct opaque* stranger = 0; 

dovrebbe funzionare correttamente.

+0

+1 da parte mia: hai vinto la mia discussione con @Nawaz :) –

+0

+1 per avermelo ricordato! – Nawaz

+0

Ho pensato che tu sia un esperto di macro.Potresti vedere http://stackoverflow.com/questions/5355241/generating-function-declaration-using-a-macro-iteration se sono possibili miglioramenti? Grazie! –

3

La mia ipotesi è questa:

In C, non c'è eredità, modelli, e la funzione di sovraccarico - tre ragioni principali che utilizziamo le strutture vuote in C++ - come interfaccia di base, come un parametro di template, come digitare per aiutare la risoluzione di sovraccarico.

Riesci a pensare a un uso reale di una struttura vuota in C?

+0

Le strutture vuote possono essere usate per gestire, no? [Confronto delle maniglie: classi vuote rispetto alle classi non definite vs. void *] (http://stackoverflow.com/questions/4525847/handles-comparison-empty-classes-vs-undefined-classes-vs-void) – Nawaz

+0

@Nawaz: Forse, forse, ho menzionato specificamente che questa era solo un'ipotesi :) –

+0

@Armen: Ciò significa che la tua ipotesi sembra essere sbagliata. Le strutture vuote in C possono essere usate in molte occasioni, specialmente dove è usato 'void *'! – Nawaz