Lexique informatique › Programmation › Most vexing parse

Most vexing parse Analyse syntaxique la plus vexante

Programmation Svenska → Mis à jour: 2026-09-24

La règle du C++ selon laquelle tout ce qui peut être interprété comme une déclaration de fonction doit l'être — même quand on voulait manifestement une variable.

Écrivez Widget w(); en croyant créer un objet : vous venez en réalité de déclarer une fonction sans argument qui retourne un Widget. Ça empire avec Timer t(Clock());, qui déclare une fonction dont le paramètre est un pointeur vers une fonction retournant un Clock. La grammaire l'exige, le compilateur s'exécute docilement. Le plus désagréable : l'erreur n'apparaît pas à la déclaration mais à l'endroit où la variable est utilisée, formulée comme si l'expression devait être de type classe — très loin de la cause. Scott Meyers a baptisé le phénomène dans Effective STL. Depuis C++11, la parade est l'initialisation par accolades : Widget w{}; est sans ambiguïté, ce qui en fait l'argument pratique le plus solide en faveur de cette syntaxe.

← Retour au lexique