2015-07-15 29 views
14

Sto riscontrando un problema che comprende chiaramente esattamente cos'è un id-expression. Comincerò seguendo quello che ho trovato nel più recente bozza di lavoro del C++ standard di partire con:Che cosa è esattamente un'espressione ID?

enter image description here

Avventurarsi alla definizione di un identifier:

Un identificatore è una sequenza arbitrariamente lunga di lettere e cifre.

così sembra come qualsiasi lunga sequenza arbitraria di lettere e cifre può essere un id-expression, ma aspetta:

enter image description here

Così il identifier devono essere dichiarati prima in ordine per essere un id-expression ? Beh lascia oltre al capo clausola 7:

enter image description here

Continuando ...

enter image description here

Proseguendo ancora ...

enter image description here

Arriviamo qui:

enter image description here

Interpreto questo per significare un id-expression richiede una identifier da dichiarare, che presuppone un id-expression. Sembra una definizione circolare. Qualcuno può dirmi dove ho sbagliato?

In ogni caso, la mia interpretazione è che l'identificatore deve essere dichiarato per primo in modo che possa essere considerato un id-expression, ma non è davvero solo uno name? Lo standard afferma che:

Ogni nome che denota un'entità viene introdotto da una dichiarazione.

Quindi perché non chiamarlo semplicemente uno name-expression?

+0

Ci sono nomi che non sono identificatori. –

risposta

-2

Per rispondere alla tua titolo:

Un id-espressione è o un incondizionato-id o un qualificata id. Seriamente.

Per rispondere a una tiritera estranei nel corpo del messaggio:

chi importa come si chiama? "Nome" sembra piuttosto vago, comunque. I grammati sono volutamente non vaghi.Le produzioni tendono anche a prendere il nome dalle produzioni che contengono direttamente da incapsulate, senza prestare attenzione a ciò che potrebbe essere ricorsivamente incapsulato. Altrimenti sarebbe un casino orribile e complesso con nomi che non hanno senso a prima vista.

+1

Questa domanda riguarda più se un * identificatore * deve essere stato (opportunamente) dichiarato come * id-expression *, AFAICS. – Columbo

+1

@Columbo: Quindi la domanda dovrebbe effettivamente dirlo, invece di chiedere qualcos'altro. –

+0

Ma lo fa, vero? – Columbo

1

Stai fraintendendo [expr.prim.general]/8:

Un identificatore è un id-espressione condizione che sia stato opportunamente dichiarato (clausola 7).

L'intenzione della frase è impedire l'utilizzo di identificativi non dichiarati nelle espressioni. Cioè questo paragrafo parla di id-espressione s che si verificano come primaria espressione s, non id-espressione s che si verificano in dichiaratori. Sono d'accordo che la frase è fuorviante e dovrebbe essere risolta. Ho presentato un problema principale.

Allora perché non chiamare un nome espressione invece?

Ragioni storiche; la sottile distinzione tra identificatori e nomi è stata fatta dopo che i costrutti grammaticali fondamentali (id-espressione, senza qualifica, ecc.) sono stati nominati, e da lì in poi, rinominarli non era un'opzione.