2015-07-22 5 views
5

stavo attraversando questo articleCome è un parse estremamente irritante?

e non v'è una dichiarazione al punto 3 dicendo

// C++98 
rectangle  w(origin(), extents());  // oops, vexing parse 

come è la di sopra di una parse più fastidioso. Se ho fatto qualcosa di simile

struct origin 
{ 
}; 
struct Rectangle 
{ 
    Rectangle(const origin& s) 
    { 
    } 
}; 

La dichiarazione

Rectangle s(origin());  

funziona bene e non si assomigliano un parse fastidioso. Perché l'autore ha detto che si tratta di un'analisi irritante. È un errore o mi manca qualcosa?

+0

Vedere la sezione 1 (b) del documento, spiega queste analisi parsimoniose. – Barmar

+3

Perché dici 'Rectangle s (origin());' non assomiglia ad un parsing fastidioso? È l'esempio canonico dell'analisi più irritante. Cosa pensi che sia l'analisi più irritante, se non quello? –

+1

La dichiarazione funziona correttamente. Prova a * usare * 's' e vedere cosa succede. – molbdnilo

risposta

8

Rectangle s(origin()); è un parodia irritante anche. Dichiara una funzione s che restituisce rectangle e accetta come argomento il puntatore alla funzione che restituisce origin. Non sei sicuro di cosa intendessi per "funziona bene".

rectangle w(origin(), extents()); dichiara una funzione w ritorno rectangle e prendendo argomenti: puntatore a funzione che restituisce origin, e puntatore a funzione che restituisce extents.

Per ulteriori dettagli see this question o consultare le altre domande sotto il tag .

+0

Funziona bene, volevo dire che si compila senza errori. Ho l'impressione che un parsing fastidioso darebbe un errore in fase di compilazione. per esempio per una classe 'foo' usandola come' foo a(); 'darebbe un errore durante la compilazione ed è una forma di analisi più irritante. –

+0

@James Franco, non fino a quando non provi ad usarlo come se fosse un oggetto – sbabbi

+3

@JamesFranco se non fosse una dichiarazione valida, quindi non sarebbe un'analisi irritante. La parte "fastidiosa" è perché hai provato a scrivere una dichiarazione di variabile, ma è successo essere sintatticamente valido come una dichiarazione di funzione. Le dichiarazioni di funzione sono legali, ovviamente. –

Problemi correlati