Lessico IT › Programmazione › Most vexing parse

Most vexing parse

Programmazione Svenska → Aggiornato: 2026-10-05

La regola del C++ per cui tutto ciò che può essere interpretato come dichiarazione di funzione deve esserlo — anche quando era ovviamente una variabile ciò che si voleva.

Scrivendo Widget w(); convinti di aver creato un oggetto, in realtà si è dichiarata una funzione senza argomenti che restituisce un Widget. Va peggio con Timer t(Clock());, che dichiara una funzione il cui parametro è un puntatore a funzione che restituisce un Clock. La grammatica lo impone e il compilatore obbedisce diligentemente. La parte sgradevole è che l'errore compare non alla dichiarazione ma dove la variabile viene usata, formulato come un'osservazione sul fatto che l'espressione deve avere tipo classe — lontano dalla causa. Scott Meyers battezzò il fenomeno in Effective STL. Dal C++11 la soluzione è l'inizializzazione con le graffe: Widget w{}; è inequivocabile, ed è il più forte argomento pratico a favore di quella sintassi.

← Torna al lessico